可変長のマルチパート文字列の連結について以前の質問(リンク)で尋ねたように、そこで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ループ内で使用しました%-25s
が、単語を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のデフォルトフォント(11pxのTahoma / Verdana)を使用しているので、少なくともそのための最適な結果が必要です。