Search code examples
stringluaconcatenationstring-formattingptokax

String Concatenation


As I asked in my previous question(Link) about concatenating a multipart string of variable lengths, I used the method answered there by rkhayrov and now, my function looks like this:

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

But, even now, the value of score is still not following the order as required. The max length of username is 25. I've used %025s inside the while loop because I want the usernames to be right-justified, while the %-25s is to make the word UserName centre justified.

EDIT

Current output:

Current output!

Required Output:

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   

I think it's because of difference in fonts, but since most of the clients have Windows 7 default fonts(Tahoma/Verdana at 11px), I need optimum result for at-least that.


Solution

  • I think it's because of difference in fonts

    It is. string.format formats by inserting whitespace. That only works for a fixed width fonts (i.e. all characters have the same width, including whitespace).

    since most of the clients have Windows 7 default fonts(Tahoma/Verdana at 11px)

    In what? How are they viewing your output? Do you write it to a textfile, that they then open in the editor of their choice (likely Notepad)? Then this approach will simply not work.

    Don't know enough about your output requirements to steer you any futher, but it's worth noting that everyone has a browser so HTML output is very portable.