1

正如我在上一个问题(链接)中询问的关于连接可变长度的多部分字符串,我使用了rkhayrov在那里回答的方法,现在,我的函数如下所示:

local sToReturn = string.format( "\t%03s\t%-25s\t%-7s\n\t", "S. No.", "UserName", "Score" )
SQLQuery = assert( Conn:execute( string.format( [[SELECT username, totalcount FROM chatstat ORDER BY totalcount DESC LIMIT %d]], iLimit ) ) )
DataArray = SQLQuery:fetch ({}, "a")
i = 1
while DataArray do
  sTemp = string.format( "%03s\t%025s\t%-7d", tostring(i), DataArray.username, DataArray.totalcount )
  sToReturn = sToReturn..sTemp.."\n\t"
  DataArray = SQLQuery:fetch ({}, "a")
  i = i + 1
end

但是,即使是现在, 的值score仍然没有按照要求的顺序排列。用户名的最大长度是 25。我%025s在 while 循环中使用过,因为我希望用户名右对齐,而%-25sis 是为了使单词UserName中心对齐。

编辑

电流输出:

电流输出!

所需输出:

Displaying the list of top 5 chit-chatters.
S. No.      UserName                Score  
  1                     Keeda   9440   
  2                    _2.2_™   7675   
  3                       aim   7057   
  4                  KGBRULES   6770   
  5                     Guddu   6322   

我认为这是因为字体不同,但由于大多数客户端都有 Windows 7 默认字体(Tahoma/Verdana 为 11px),我至少需要最佳结果。

4

3 回答 3

5

我认为这是因为字体不同

这是。string.format通过插入空格来格式化。这适用于固定宽度的字体(即所有字符具有相同的宽度,包括空格)。

因为大多数客户端都有 Windows 7 默认字体(Tahoma/Verdana at 11px)

在什么?他们如何查看您的输出?您是否将其写入文本文件,然后他们在他们选择的编辑器(可能是记事本)中打开?那么这种方法根本行不通。

对您的输出要求了解不多,无法进一步指导您,但值得注意的是,每个人都有浏览器,因此 HTML 输出非常便携。

于 2012-04-16T04:56:35.343 回答
1

我会从 string.format 中删除标签;并仅使用 %25s 提供的理由。不会完美,但可能会更接近。

如果可以,请使用固定宽度的字体。

于 2012-04-17T03:41:37.103 回答
1

string.format 不会截断 - 字段的宽度是最小的,而不是最大的。您必须自己将字符串截断为 25 个字符,例如DataArray.username:sub(0,25).

于 2012-04-15T20:22:38.400 回答