Skip to main content
Hello,





Can I use commas to sperate thousands and millions in ZPL with the FORMAT keyword?





For example, I want the number 123456789 to be formatted as 123,456,789.
This is not directly possible from the FORMAT keyword.





However, you can create a sub-macro that takes your number as an argument and format it accordingly. You can then call this sub-macro whenever it is needed.





I have drafted this sub-macro and a dummy macro to illustrate its function.

Dummy macro defining the number to be formatted





# Define a number

a_number = 123456789

# Print the number

PRINT "Input number = ", a_number

PRINT "Calling formatting sub-macro..."

PRINT ""

PRINT "Formatted number = ",

# Define the number as an input for the sub-macro

CALLSETDBL 1, a_number

# Call the formatting sub-macro

CALLMACRO Comma_separation.ZPL


Sub-macro formatting the numbers with commas





# Retrieve input number

a_number = CALD(1)

# Change format to 3 digits integer

FORMAT 3 INT

# If input number is smaller than 1000 ...

IF (a_number > 999)

# and if input number is smaller than 1000000 ...

IF (a_number > 999999)

a_string$ = $STR(a_number)

a_string$ = $RIGHTSTRING(a_string$, 6)



# ... otherwise, we print the millions, add a coma

PRINT $STR(a_number/999999), ",",

# print the thousands, add another coma

PRINT $LEFTSTRING(a_string$, 3), ",",

# and then print the rest

PRINT $RIGHTSTRING(a_string$, 3)

ELSE

a_string$ = $STR(a_number)



# ... we first print the thousands, add a coma

PRINT $STR(a_number/1000), ",",

# and then print the rest

PRINT $RIGHTSTRING(a_string$, 3)

ENDIF

ELSE

# ... we just print that number

PRINT a_number

ENDIF





If you copy those to macro to your \Documents\Zemax\Macros folder and execute Comma_example.ZPL, this will give the following result:











Please note that you'd need to modify this macro if you want to account for numbers greater than 999,999,999.





Kind regards,








David
Hey David,





I think there might be a way to do it with just the FORMAT keyword. We support this structure:


 



FORMAT "C_format_string" [lit]


The optional keyword LIT (for literal) indicates the value should be printed according to the “C” language format specifier. I'll bet (without proof, but that's why it's betting) that C supports this kind of format directly.





Best,





- Mark

Actually, I can't find a C format spec for this...I'm really surprised!




Hi Mark,








I did spend a little bit of time searching for the C syntax that would give me this number formatting. However, to my surprise as well, it was not easy to figure out.





I ended up writting this sub-macro, but I'm happy to change it if someone finds a better solution!





Kind regards,








- Davd

Reply