String 字符串串联

String 字符串串联,string,lua,concatenation,string-formatting,ptokax,String,Lua,Concatenation,String Formatting,Ptokax,正如我在《关于连接可变长度的多部分字符串》一书中所问的那样,我使用了前面回答的方法,现在,我的函数如下所示: 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 to

正如我在《关于连接可变长度的多部分字符串》一书中所问的那样,我使用了前面回答的方法,现在,我的函数如下所示:

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
则使单词
用户名
居中对齐

编辑 电流输出:

所需输出:

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),我至少需要最佳结果。

string.format不会截断-字段的宽度是最小的,而不是最大的。您必须自己使用类似于
DataArray的方法将字符串截断为25个字符。用户名:sub(0,25)

string.format不会截断-字段的宽度是最小的,而不是最大的。您必须自己使用类似于
DataArray的东西将字符串截断为25个字符。用户名:sub(0,25)

我想这是因为字体不同

是的<代码>字符串。格式化通过插入空格格式化。这仅适用于固定宽度字体(即所有字符的宽度相同,包括空格)

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

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

我对输出需求了解得不够,无法指导您做进一步的工作,但值得注意的是,每个人都有一个浏览器,因此HTML输出是非常可移植的

我想这是因为字体不同

是的<代码>字符串。格式化通过插入空格格式化。这仅适用于固定宽度字体(即所有字符的宽度相同,包括空格)

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

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


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

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


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

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



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

能否请您澄清输出的预期外观,以及您将得到什么?“按需”表示什么?此外,没有“居中对齐”,只有左对齐或右对齐。@MarkReed编辑了问题。请检查。@Mud我希望输出将解释我所说的右/左对齐。我认为您在屏幕截图中没有使用单空格字体,仅供参考。请您澄清输出的预期外观,以及您将得到什么?“按需”表示什么?此外,没有“居中对齐”,只有左对齐或右对齐。@MarkReed编辑了问题。请检查。@Mud我希望输出能够解释我所说的右/左对齐。我不认为您在截图中使用的是单空格字体,仅供参考。因此,如果我从
字符串.format
函数中删除
\t
s,并将其替换为
字符串.rep(“,8)
,这会使我的显示在所有类型的字体/操作系统上通用吗?输出在P2P客户端上以纯文本的形式出现。(如DC++)如果你必须以纯文本的形式输出--没有可用的标记,没有创建表格或定位文本的方法,并且你对输出字体没有控制权--那么你就完了。你没有办法实现水平对齐。嗯,那么我就按照当前的格式,让用户认为::PWhy在地球上是一个纯文本的程序,不使用固定宽度的字体?可以在客户端上配置吗?因此,如果我从
string.format
函数中删除
\t
s,并将其替换为
string.rep(“,8)
,这会使我的显示在各种字体/OS上都很常见吗?输出在P2P客户端上以纯文本的形式出现。(例如DC++)如果您必须以纯文本形式输出—没有可用的标记,没有创建表格或定位文本的方法,并且您无法控制输出字体—那么您就完了。你没有办法实现水平对齐。嗯,那么我就按照当前的格式,让用户认为::PWhy在地球上是一个纯文本的程序,不使用固定宽度的字体?可以在客户端上配置吗?我也这么想。例如使用%33s提供25+8个字符的空间。我也这么想。例如使用%33s提供25+8个字符的空间。