LB Booster
Programming >> Liberty BASIC language >> output to gui problem formating numbers
http://lbb.conforums.com/index.cgi?board=lblang&action=display&num=1434530640

output to gui problem formating numbers
Post by hammerjit on Jun 17th, 2015, 08:44am

Hi, I am having problem with this. My text file sample is like this

Jones, Joyce, 22, 5.6
Newman, Bill, 26, 0.35
Abercrombe, Tom Cruise, 35, 1254.25
Belton, Mindy, 28, 1245687.8
Doyle, Barbara, 15, 1040.05

I want to output to gui and format the last columns as "#,###,###.##"

My code (as below) when executed only show value for first record and the balance rows are blank.

Can someone help me out?

Code:
c=0
dim last$(50),first$(50),age$(50),phone$(50)
dim recnum(50)

    nomainwin

    WindowWidth = 688
    WindowHeight = 575

    statictext #main.statictext1, "StaticText Caption", 38, 66, 100, 440
    statictext #main.statictext2, "StaticText Caption", 148, 66, 100, 440
    statictext #main.statictext3, "StaticText Caption", 248, 66, 100, 440
    statictext #main.statictext4, "StaticText Caption", 348, 66, 100, 440
    open "Showing Records directly from File" for window as #main
    print #main, "font ms_sans_serif 0 16"

open "C:\myTestData.txt" for input as #fo
c=0
while eof(#fo)=0
c=c+1
input #fo, name$
last$(c)=name$
input #fo, name$
first$(c)=name$
input #fo, q$
age$(c)=q$
input #fo, q$
phone$(c)=q$
wend
close #fo
recnum=c

showRec1$=""
showRec2$=""
showRec3$=""
showRec4$=""
for i=1 to recnum
showRec1$=showRec1$+last$(i)+chr$(10)+chr$(13)
showRec2$=showRec2$+first$(i)+chr$(10)+chr$(13)
showRec3$=showRec3$+age$(i)+chr$(10)+chr$(13)
showRec4$=showRec4$+phone$(i)+chr$(10)+chr$(13)
next i


print #main.statictext1,showRec1$
print #main.statictext2,showRec2$
print #main.statictext3,showRec3$
print #main.statictext4,using("###,###.##",showRec4$)

[main.inputLoop]   'wait here for input event
    wait

END
 

Re: output to gui problem formating numbers
Post by Richard Russell on Jun 17th, 2015, 10:42am

on Jun 17th, 2015, 08:44am, hammerjit wrote:
Hi, I am having problem with this.

I can see a few problems with your code. Firstly, your CRLF sequences are in the wrong order (you are using LFCR!). Change them to:

Code:
chr$(13)+chr$(10) 

Secondly you are passing a string instead of a number to the USING function here:

Code:
using("###,###.##",showRec4$) 

Thirdly you seem to be hoping that USING() can format a whole list of numbers in one go. It can't - it can only format a single number. So you will need to call USING() for each value in the list; this is most easily done when you construct the list:

Code:
showRec4$=showRec4$+using("###,###.##",val(phone$(i)))+chr$(13)+chr$(10) 

Richard.

Re: output to gui problem formating numbers
Post by hammerjit on Jun 18th, 2015, 06:22am

Thanks Richard, that was a great help. Got it to work.
Re: output to gui problem formating numbers
Post by hammerjit on Jun 19th, 2015, 07:02am

Hi Richard, supposedly with this same code and text file, I want to display each record in 2 lines, can it be done?

eg

<first line>Jones Joyce
<2nd line> 22 5.6
<blank line>
<3rd line>Newman Bill
<4th line> 26 0.35
<blank line>
etc....

Asking this since in my actual data, I want to display 15 columns and it is not wide enough currently

Or is there another possible solution?
Re: output to gui problem formating numbers
Post by tsh73 on Jun 19th, 2015, 07:32am

I think you better have it scrolled.
You can use Listbox and use Stylebits to add horisontal scrollbar
(I just found stylebits at LB forum - I do not use them so have no idea)
Code:
'   Form created with the help of Freeform-J v.261006
'   Generated on Jun 19, 2015 at 10:17:41

    nomainwin

    WindowWidth = 328
    WindowHeight = 310

    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)

    N=40        'as big as you need
    dim array$(N)

    listbox #main.listbox1, array$(, [listbox1DoubleClick], 22, 16, 272, 250
    Stylebits #main.listbox1, _WS_HSCROLL, 0,0, 0
    open "untitled" for window as #main
    print #main, "trapclose [quit.main]"

    print #main, "font courier_new 8"   'you need monospaced font so columns neatly stack up

    'populate listbox array. Make it big (run several times)
   for k = 1 to 5
   restore
    for i = 1 to 5
        j=j+1
        read a1$, a2$, n1, n2
         array$(j)=padr$(a1$,12)+padr$(a2$,10)+"    "+using("###",n1)+"   "+using("#######.##",n2)
    next
   next

    'reload listbox
    #main.listbox1 "reload"
    wait

[quit.main]
    Close #main
    END


[listbox1DoubleClick]    'Perform action for the listbox named 'listbox1'
    'Insert your own code here
    wait

data Jones, Joyce, 22, 5.6
data Newman, Bill, 26, 0.35
data Abercrombe, "Tom Cruise", 35, 1254.25
data Belton, Mindy, 28, 1245687.8
data Doyle, Barbara, 15, 1040.05

'-------------------------------
'adds spaces from the left until 'n' symbols
'if n<len(a$) returns left$(a$,n)
function padl$(a$,n)
    padl$ = left$(space$(n-len(a$))+a$,n)
end function

'adds spaces from the right until 'n' symbols
'if n<len(a$) returns left$(a$,n)
function padr$(a$,n)
    padr$ = left$(a$+space$(n-len(a$)),n)
end function