字符串连接

如我在上一个问题中问到的有关连接可变长度的分块字符串的问题,我使用了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。我在while循环中使用了%025s,因为我希望用户名右对齐,而%-25s是为了使单词UserName居中对齐。

编辑

当前输出:

当前输出!

要求的输出:

显示最顶级的5个聊天者列表。
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),因此我需要至少为此获得最佳结果。

原文链接 https://stackoverflow.com/questions/10165652

点赞
stackoverflow用户797049
stackoverflow用户797049

string.format 不会截断字符串 - 字段的宽度是最小的,而不是最大的。你需要自己截断字符串至 25 个字符,可以使用以下代码实现: DataArray.username:sub(0,25)

2012-04-15 20:22:38
stackoverflow用户501459
stackoverflow用户501459

我认为这是字体差异导致的。

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

因为大多数客户使用 Windows 7 的默认字体(11px 的 Tahoma/Verdana),你的输出是如何查看的呢?你是将它写入文本文件,然后让客户在喜欢的编辑器中打开(可能是记事本)吗?那么这种方法根本行不通。

我不知道你的输出需求,无法给你进一步的指引,但值得注意的是每个人都拥有浏览器,所以 HTML 输出非常便携。

2012-04-16 04:56:35
stackoverflow用户282536
stackoverflow用户282536

我会从 string.format 中移除制表符,并仅使用 %25s 提供的对齐方式。虽然不完美但可能会更加接近。如果可以的话,请使用等宽字体。

2012-04-17 03:41:37