簡體   English   中英

字符串串聯

[英]String Concatenation

正如我在上一個問題(鏈接)中有關連接可變長度的多部分字符串所問的那樣,我使用了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居中。

編輯

電流輸出:

電流輸出!

要求的輸出:

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格式。 適用於固定寬度的字體(即,所有字符都具有相同的寬度,包括空格)。

因為大多數客戶端都使用Windows 7默認字體(Tahoma / Verdana為11px)

在什么地方? 他們如何查看您的輸出? 您是否將其寫入文本文件,然后在自己選擇的編輯器(可能是記事本)中打開? 那么這種方法將根本行不通。

對輸出要求的了解不足,無法進一步指導您,但是值得注意的是,每個人都擁有瀏覽器,因此HTML輸出具有很高的可移植性。

string.format不會截斷-字段的寬度是最小的,不是最大的。 您必須使用DataArray.username:sub(0,25)類的東西將字符串截斷為25個字符。

我將從string.format中刪除選項卡; 並僅使用%25s提供的理由。 不會很完美,但可能會更接近。

如果可以,請使用固定寬度的字體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM