gpt4 book ai didi

tcl - 如何在 tcl 中以统一的方式显示输出

转载 作者:行者123 更新时间:2023-12-04 22:15:34 24 4
gpt4 key购买 nike

我对 format 有疑问命令。我的输出有点像下面的集群和不均匀

    24-04-2011    16:07  <DIR>  Administrator 
15-05-2011 16:05 <DIR> confuser
01-02-2011 20:57 <DIR> Public

我应该怎么做才能以正确和统一的方式显示输出。都在同一列中开始。像这样 :

是的,我使用了这个命令 puts [format {%-s %-4s %-8s} $user\t $date\t $time]它给了我这样的输出:
Administrator 15-05-2011 16:05 
confuser 01-02-2011 20:57
Public 29-01-2011 19:28
TechM 30-04-2011 09:47

我收到的输出是根据第一个字符串中出现的字母数量,例如管理员 confuser public techm。所以我需要知道的是如何获得不考虑第一个字符串长度的输出并给出适当的统一列输出。

最佳答案

廉价的破解方法是在输出字符串中使用制表符作为分隔符(“\t”而不是“”)。这将适用于少量的变化,但不会处理广泛的变化(或当前终端/编辑器标签宽度的微小变化)。

要正确完成这项工作,您需要首先获取要打印的所有概念行的列表(即,尚未格式化的数据)。然后遍历每一行并计算出每个字段所需的宽度,取整个数据集的最大值。这样,您就可以为 format 配置格式字符串。 .这是一个示例(对于 Tcl 8.5),其中所有内容都被格式化为字符串:

proc printColumnarLines {lines} {
foreach fields $lines {
set column 0
foreach field $fields {
set w [string length $field]
if {![info exist width($column)] || $width($column) < $w} {
set width($column) $w
}
incr column
}
}
foreach fields $lines {
set column 0
foreach field $fields {
puts -nonewline [format "%-*s " $width($column) $field]
incr column
}
puts ""; # Just the newline please
}
}
*在该位置的格式字符串中意味着采用另一个参数来指定该字段的宽度。不过,您错过了它,我并不感到惊讶;格式字符串实际上是一种非常密集的微语言,很容易跳过重要的一点。 (对于所有其他使用它们的语言也是如此;很少有人知道你可以用它们做什么。)

您可以使用固定的字段集和其他 % 做更智能的事情-sequences 支持 *也。请注意,我通常必须进行实验才能得到我想要的(尤其是浮点数……)

关于tcl - 如何在 tcl 中以统一的方式显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com