Right now it does Integers, US Dollars, Decimals out to two places, and even adding spaces. (I have a program in development where I right adjust the number, but I add the number of spaces needed based on the length of the actual number.
I wrote this to address a specific problem, where I use the LEN of the number as the index into the proper array to get the proper mask. (OPTION BASE 1 must be used).
To use this in your program:
I$="DEC2"
X=1234.56
FORMAT(X,I$)
And the format function returns a variable FMT$="#,###,
Here is a snippet of code where in a program I am developing (extract data from JSON and XML file. This code determines the size of the line number on a report, and calculates how many spaces to pace before the number so they all are right-justified. The routine knows the total number of lines, and using the current line number it puts the proper amount of spaces
L$=LINES!Lx=LEN(L$)!I$="SPACES"
FOR L=1 TO LINES
FILE OUTFile$ READLINE Tempstr$
L$=L!Ly=LEN(L$)!Ln=lx-ly
FORMAT(Ln,I$)
Tempstr$=FMT$&L&": "&Tempstr$
FILE RPTFile$ WRITELINE Tempstr$
NEXT L
There is also another format function written by Henko (and the Dutchman) that instead of returning the Format Mask (eg: FMT$="#,###.## for 1234.56) it returns X$ already formated. (X$ ="1,234.56"). The link to it is: viewtopic.php?f=20&t=1314&hilit=Formatting&start=20
Code: Select all
'--------------------------------------------------------
' FORMAT Statement:
' Routine that takes the lenght of the number,
' uses it as an index to get the right FORMAT
' mask. I$ is used to tell the program what kind
' of number X is, then executes the proper
' formatting.
'
DEF FORMAT(X,I$)
' Xi=INT(X)
X$=X
L=LEN(X$)
IF I$="INT" THEN
DIM FM$(11)
FM$(1) = "#"
FM$(2) = "##"
FM$(3) = "###"
FM$(4) = "#,###"
FM$(5) = "##,###"
FM$(6) = "###,###"
FM$(7) = "#,###,###"
FM$(8) = "##,###,###"
FM$(9) = "###,###,###"
FM$(10) = "#,###,###,###"
FM$(11) = "##,###,###,###" 'This is for ResolveFILE
ENDIF
IF I$="USD" THEN
DIM FM$(10)
FM$(1) = "$#.##"
FM$(2) = "$##.##"
FM$(3) = "$###.##"
FM$(4) = "$#,###.##"
FM$(5) = "$##,###.##"
FM$(6) = "$###,###.##"
FM$(7) = "$#,###,###.##"
FM$(8) = "$##,###,###.##"
FM$(9) = "$###,###,###.##"
FM$(10) = "$#,###,###,###.##"
ENDIF
IF I$="DEC2" THEN
DIM FM$(10)
FM$(1) = "#.##"
FM$(2) = "##.##"
FM$(3) = "###.##"
FM$(4) = "#,###.##"
FM$(5) = "##,###.##"
FM$(6) = "###,###.##"
FM$(7) = "#,####,###.##"
FM$(8) = "##,###,###.##"
FM$(9) = "###,###,###.##"
FM$(10) = "#,###,###,###.##"
ENDIF
IF I$="SPACES" THEN
DIM FM$(10)
FM$(1) = " "
FM$(2) = " "
FM$(3) = " "
FM$(4) = " "
FM$(5) = " "
FM$(6) = " "
FM$(7) = " "
FM$(8) = " "
FM$(9) = " "
FM$(10) = " "
IF X>0 THEN
.FMT$=FM$(X)
ELSE
.FMT$=""
ENDIF
ELSE
.FMT$=FM$(L)
ENDIF
ENDDEF