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ループ内で使用しました%-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)を使用しているので、少なくともそのための最適な結果が必要です。

4

3 に答える 3

5

フォントの違いによると思います

です。string.format空白を挿入してフォーマットします。これは、固定幅フォントでのみ機能します(つまり、空白を含め、すべての文字の幅が同じです)。

ほとんどのクライアントにはWindows7のデフォルトフォントがあるため(11pxのTahoma / Verdana)

何で?彼らはあなたの出力をどのように見ていますか?それをテキストファイルに書き込んでから、選択したエディター(メモ帳など)で開きますか?その場合、このアプローチは単に機能しません。

出力要件について十分に理解していないので、さらに先に進むことができますが、誰もがブラウザを持っているため、HTML出力は非常に移植性が高いことに注意してください。

于 2012-04-16T04:56:35.343 に答える
1

string.formatは切り捨てられません-フィールドの幅は最大ではなく最小です。のようなものを使用して、文字列を自分で25文字に切り捨てる必要がありますDataArray.username:sub(0,25)

于 2012-04-15T20:22:38.400 に答える
1

string.formatからタブを削除します。%25sによって提供される正当化のみを使用してください。完璧ではありませんが、おそらくもっと近くなるでしょう。

可能であれば、固定幅フォントを使用してください。

于 2012-04-17T03:41:37.103 に答える