[英]How to format a string longer than 99 characters in Lua
我正在格式化要打印到控制台的字符串,并尝试格式化终端大小。 但是,Lua似乎不允许任何类型的格式超过99个字符。 ( 来源 )
在终端宽度超过100列的情况下,我还可以填充字符串来使用整行吗? 或打印出正确排列的东西? 我知道我可以用循环来做数学和填充空间,但这感觉效率低下。 还有什么我想念的吗? 也许一些终端控制字符?
更新 :我链接了源中的错误位置。 这似乎是我被挂断的功能。 它只允许2位数字来指定字段大小,如第1087行所述。
我正在尝试做的一个例子:
每运行一次X迭代,我打印一行格式如下:
"\rDone: %d, Left %d, Current: %s"
这样每次都会清除该行以保持状态更新,而不会通过行向控制台发送垃圾邮件。
问题是当字符串/long-path/to/file-name
打印为%s
参数并且下一次迭代打印/path/to/file
,前一行的一部分被保留,因为它没有被覆盖较短的一行。 使用格式将线路填充到控制台的整个宽度可防止这些“遗留”字符。
您可以尝试打印一些ANSI转义码 。 请参阅“光标位置”代码。
由于无法将控制代码直接写入字符串,因此必须使用string.char生成包含控制代码的字符串。
另一种选择是预先生成每个所需长度的填充字符串,并在以后引用它们:
padding = {}
padding[1] = " "
for i = 2,MAX_PAD do
padding[i] = padding[i-1].." "
end
-- now padding[i] is a string of i spaces.
在传递给string.format
之前,将填充字符串与格式字符串的其余部分连接起来。
使用格式将线路填充到控制台的整个宽度可防止这些“遗留”字符。
这样:
local str = string.format("\rDone: %d, Left %d, Current: %s", ...)
if(#str > line_length) then
str = str .. string.rep(" ", line_length - #str)
end
我的大部分问题都是用ESC[2K
控制字符解决的。 控制代码不是试图用空格覆盖前一行,而是删除整行。 以下是VT100控制代码的一个很好的参考: http : //www.termsys.demon.co.uk/vtansi.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.