Core Function Printf
Line 22: | Line 22: | ||
=== Format Control === | === Format Control === | ||
+ | |||
+ | Formats are controlled by curly braces { } | ||
+ | |||
+ | So where as in C you would do %d to define an int in the param here you would use {0:d} with the 0 being the param number which you wish to use so you could use the 10th param by typing {10:d} and place this anywhere in your string. | ||
+ | |||
+ | Since Sputnik makes use of { } in strings to define code you must escape it with \ for example: | ||
+ | { } becomes \{ } this is vital however thats only if you use " " strings for example | ||
+ | "Value is {0:d}" will fail because { } is treated as executable code | ||
+ | "Value is \{0:d}" will work properly since now its defined properly | ||
+ | 'Value is {0:d}' will work properly since the string is not parsed | ||
+ | @"Value is {0:d}" will also work properly since the string is no longer parsed | ||
Something to note is that params are counted from 0 for example | Something to note is that params are counted from 0 for example | ||
Line 29: | Line 40: | ||
And so on so to use param0 in the format string | And so on so to use param0 in the format string | ||
− | "format {0}" | + | "format \{0}" |
+ | or | ||
+ | 'format {0}' | ||
+ | or | ||
+ | @"format {0}" | ||
To use param 1 | To use param 1 | ||
− | "format {1}" | + | "format \{1}" |
+ | or | ||
+ | 'format {1}' | ||
+ | or | ||
+ | @"format {1}" | ||
To use param 0 and 3 | To use param 0 and 3 | ||
− | "format { | + | "format \{3}" |
+ | or | ||
+ | 'format {3}' | ||
+ | or | ||
+ | @"format {3}" | ||
Now after you enter the param number you can a place a : then special formats as shown below for example to print a hex number | Now after you enter the param number you can a place a : then special formats as shown below for example to print a hex number | ||
− | Printf("{0:x4}\n", (int)1337) | + | Printf("\{0:x4}\n", (int)1337) |
See its using param 0 then : which means we want a special format then x to say we want to use a hex format then 4 to say we want the hex to be 4 chars long. | See its using param 0 then : which means we want a special format then x to say we want to use a hex format then 4 to say we want the hex to be 4 chars long. | ||
Line 52: | Line 75: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("->{0,10}<-\n", "Hello") | + | Printf("->\{0,10}<-\n", "Hello"); |
− | Printf("->{0,-10}<-\n", "Hello") | + | Printf("->\{0,-10}<-\n", "Hello"); |
− | ; Generates | + | // Generates |
− | + | // -> Hello<- | |
− | + | // ->Hello <- | |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 127: | Line 150: | ||
|cf90 | |cf90 | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Line 208: | Line 236: | ||
|see below | |see below | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Line 298: | Line 331: | ||
|December, 2002 | |December, 2002 | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
Line 438: | Line 474: | ||
|10/12/2002 | |10/12/2002 | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
Line 500: | Line 539: | ||
|Eight digit hex. | |Eight digit hex. | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
Line 518: | Line 560: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("{0:$#,##0.00;($#,##0.00);Zero}", 1243.50); // prints 1,243.50 | + | Printf("\{0:$#,##0.00;($#,##0.00);Zero}", 1243.50); // prints 1,243.50 |
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("{0:(###) ###-####}", 8005551212); // prints (800) 555-1212 | + | Printf("\{0:(###) ###-####}", 8005551212); // prints (800) 555-1212 |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 533: | Line 575: | ||
$num3 = 123456; | $num3 = 123456; | ||
− | Printf("{0:00000}\n", (int)$num1); // "00123" | + | Printf("\{0:00000}\n", (int)$num1); // "00123" |
− | Printf("{0:00000}\n", (int)$num2); // "00045" | + | Printf("\{0:00000}\n", (int)$num2); // "00045" |
− | Printf("{0:00000}\n", (int)$num3); // "123456" | + | Printf("\{0:00000}\n", (int)$num3); // "123456" |
− | Printf("{0:d5}\n", (int)$num1); // "00123" | + | Printf("\{0:d5}\n", (int)$num1); // "00123" |
− | Printf("{0:d5}\n", (int)$num2); // "00045" | + | Printf("\{0:d5}\n", (int)$num2); // "00045" |
− | Printf("{0:d5}\n", (int)$num3); // "123456" | + | Printf("\{0:d5}\n", (int)$num3); // "123456" |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 545: | Line 587: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("{0:yes;;no}\n", (int)1); // This will print "no" if value is 0, "yes" if value is 1. | + | Printf("\{0:yes;;no}\n", (int)1); // This will print "no" if value is 0, "yes" if value is 1. |
− | Printf("{0:yes;;no}\n", (int)0); // This will print "no" if value is 0, "yes" if value is 1. | + | Printf("\{0:yes;;no}\n", (int)0); // This will print "no" if value is 0, "yes" if value is 1. |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 552: | Line 594: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("{0:##.00'%}\n", 1.23); // This will yield "1.23%". | + | Printf("\{0:##.00'%}\n", 1.23); // This will yield "1.23%". |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 559: | Line 601: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
// Doubling them escapes them. For example: | // Doubling them escapes them. For example: | ||
− | Printf("{{SomeString}}={0}","Hello"); // will produce: "{SomeString}=Hellow" | + | Printf("\{\{SomeString}}=\{0}","Hello"); // will produce: "{SomeString}=Hellow" |
+ | Printf('{{SomeString}}={0}',"Hello"); // will produce: "{SomeString}=Hellow" | ||
+ | Printf(@"{{SomeString}}={0}","Hello"); // will produce: "{SomeString}=Hellow" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 566: | Line 610: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
$val = 4219.6; | $val = 4219.6; | ||
− | Printf("{0:$#,#.00;Call Us;Call Us}", $val); | + | Printf("\{0:$#,#.00;Call Us;Call Us}", $val); |
// This will return "$4,219.60". The .00 will force 2 decimals and the “;Call Us;Call Us” to show the text “Call Us” in place of negative and null values respectively. (Just in case) | // This will return "$4,219.60". The .00 will force 2 decimals and the “;Call Us;Call Us” to show the text “Call Us” in place of negative and null values respectively. (Just in case) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 573: | Line 617: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("{0:#,0}", (int)7770000); // 7,770,000 | + | Printf("\{0:#,0}", (int)7770000); // 7,770,000 |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 579: | Line 623: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | $tmp = SPrintf("{0:###-###-####}", | + | $tmp = SPrintf("\{0:###-###-####}", 8005551212); |
$result = Replace($tmp, "-","."); | $result = Replace($tmp, "-","."); | ||
println($result); // Prints 800.555.1212 | println($result); // Prints 800.555.1212 | ||
Line 587: | Line 631: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | println(Replace(SPrintf("{0:###-###-####}", | + | println(Replace(SPrintf("\{0:###-###-####}", 8005551212), "-",".")); // Prints 800.555.1212 |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 611: | Line 655: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
$currency = 1337; | $currency = 1337; | ||
− | $str = SPrintf("{0:c}", $currency); // Currency converted to string | + | $str = SPrintf("\{0:c}", $currency); // Currency converted to string |
$back = Replace(Replace(Replace($str, @CURRENCY, ""), ",", ""), ".", ""); // Currency converted back to string | $back = Replace(Replace(Replace($str, @CURRENCY, ""), ",", ""), ".", ""); // Currency converted back to string | ||
println($str); // Print the currency | println($str); // Print the currency | ||
Line 625: | Line 669: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
$myint = 100; | $myint = 100; | ||
− | $val = SPrintf("Value is 0x'{0:x}'", (int)$myint); // The (int) will only take in $myint | + | $val = SPrintf("Value is 0x'\{0:x}'", (int)$myint); // The (int) will only take in $myint |
$myint = 100; | $myint = 100; | ||
$myint2 = 100; | $myint2 = 100; | ||
− | $val = SPrintf("Value is 0x'{0:x}'", (int)($myint + $myint2)); // The (int) will now take in $myint AND $myint2 | + | $val = SPrintf("Value is 0x'\{0:x}'", (int)($myint + $myint2)); // The (int) will now take in $myint AND $myint2 |
</syntaxhighlight> | </syntaxhighlight> | ||
Note how $myint was cast as an int? using (int)$myint this is vital since if you dont do that it might send a string or a float you never really know with $variables so its best to cast it. | Note how $myint was cast as an int? using (int)$myint this is vital since if you dont do that it might send a string or a float you never really know with $variables so its best to cast it. | ||
Line 637: | Line 681: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
$myint = 100; | $myint = 100; | ||
− | $val = SPrintf("Value is 0x'{0:x}'", int($myint)); | + | $val = SPrintf("Value is 0x'\{0:x}'", int($myint)); |
</syntaxhighlight> | </syntaxhighlight> | ||
Line 651: | Line 695: | ||
<syntaxhighlight lang="sputnik"> | <syntaxhighlight lang="sputnik"> | ||
− | Printf("Value is 0x'{0:x}'", (int)100) ; Prints 0x64 since the {0:x} is telling it to place param 0 as :x meaning hex | + | Printf("Value is 0x'\{0:x}'", (int)100) ; Prints 0x64 since the {0:x} is telling it to place param 0 as :x meaning hex |
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:Core Function]] | [[Category:Core Function]] |
Revision as of 21:19, 20 August 2013
SPrintf( <expression>, <expressions>... )
Description
Create a formatted string.
expression
The format string and flags to use (see Remarks).
expressions
Variables that will be output according to the "Format Control".
Return Value
Success: Returns the formatted string.
Failure: Returns an empty string.
Format Control
Formats are controlled by curly braces { }
So where as in C you would do %d to define an int in the param here you would use {0:d} with the 0 being the param number which you wish to use so you could use the 10th param by typing {10:d} and place this anywhere in your string.
Since Sputnik makes use of { } in strings to define code you must escape it with \ for example: { } becomes \{ } this is vital however thats only if you use " " strings for example "Value is {0:d}" will fail because { } is treated as executable code "Value is \{0:d}" will work properly since now its defined properly 'Value is {0:d}' will work properly since the string is not parsed @"Value is {0:d}" will also work properly since the string is no longer parsed
Something to note is that params are counted from 0 for example
Printf("format string", "param0", "param1", "param2", "param3")
And so on so to use param0 in the format string
"format \{0}" or 'format {0}' or @"format {0}"
To use param 1
"format \{1}" or 'format {1}' or @"format {1}"
To use param 0 and 3
"format \{3}" or 'format {3}' or @"format {3}"
Now after you enter the param number you can a place a : then special formats as shown below for example to print a hex number
Printf("\{0:x4}\n", (int)1337)
See its using param 0 then : which means we want a special format then x to say we want to use a hex format then 4 to say we want the hex to be 4 chars long.
Strings
There really isn’t any formatting within a string, beyond it’s alignment. Alignment works for any argument being printed.
Example:
Printf("->\{0,10}<-\n", "Hello"); Printf("->\{0,-10}<-\n", "Hello"); // Generates // -> Hello<- // ->Hello <-
Numbers
Basic number formatting specifiers:
Specifier | Type | Format | Output with (double)1.42 | Output with (int)1337 | Output with (int)-12400 |
c | Currency | {0:c} | $1.42 | $1,337 | -$12,400 |
d | Decimal (Whole number) | {0:d} | 1337 | -12400 | |
e | Scientific | {0:e} | 1.420000e+000 | 1.337000e+003 | -1.240000e+004 |
f | Fixed point | {0:f} | 1.42 | 1337.00 | -12400.00 |
g | General | {0:g} | 1.42 | 1337 | -12400 |
n | Number with commas for thousands | {0:n} | 1.42 | 1,337 | -12,400 |
r | Round trippable | {0:r} | 1.42 | ||
x | Hexadecimal | {0:x4} | 1.42 | 0539 | cf90 |
Custom number formatting:
Specifier | Type | Example | Output with (double)1500.42 | Note |
0 | Zero placeholder | {0:00.0000} | 1500.4200 | Pads with zeroes. |
# | Digit placeholder | {0:(#).##} | (1500).42 | |
. | Decimal point | {0:0.0} | 1500.4 | |
, | Thousand separator | {0:0,0} | 1,500 | Must be between two zeroes. |
,. | Number scaling | {0:0,.} | 2 | Comma adjacent to Period scales by 1000. |
% | Percent | {0:0%} | 150042% | Multiplies by 100, adds % sign. |
e | Exponent placeholder | {0:00e+0} | 15e+2 | Many exponent formats available. |
; | Group separator | see below | see below | see below |
The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:
Dates
Note that date formatting is especially dependent on the system’s regional settings; the example strings here are from my local locale.
Specifier | Type | Example (Passed @DateTimeNow) |
d | Short date | 10/12/2002 |
D | Long date | December 10, 2002 |
t | Short time | 10:11 PM |
T | Long time | 10:11:29 PM |
f | Full date & time | December 10, 2002 10:11 PM |
F | Full date & time (long) | December 10, 2002 10:11:29 PM |
g | Default date & time | 10/12/2002 10:11 PM |
G | Default date & time (long) | 10/12/2002 10:11:29 PM |
M | Month day pattern | December 10 |
r | RFC1123 date string | Tue, 10 Dec 2002 22:11:29 GMT |
s | Sortable date string | 2002-12-10T22:11:29 |
u | Universal sortable, local time | 2002-12-10 22:13:50Z |
U | Universal sortable, GMT | December 11, 2002 3:13:50 AM |
Y | Year month pattern | December, 2002 |
The ‘U’ specifier seems broken; that string certainly isn’t sortable.
Custom date formatting:
Specifier | Type | Example | Example Output |
dd | Day | {0:dd} | 10 |
ddd | Day name | {0:ddd} | Tue |
dddd | Full day name | {0:dddd} | Tuesday |
f, ff, … | Second fractions | {0:fff} | 932 |
gg, ... | Era | {0:gg} | A.D. |
hh | 2 digit hour | {0:hh} | 10 |
HH | 2 digit hour, 24hr format | {0:HH} | 22 |
mm | Minute 00-59 | {0:mm} | 38 |
MM | Month 01-12 | {0:MM} | 12 |
MMM | Month abbreviation | {0:MMM} | Dec |
MMMM | Full month name | {0:MMMM} | December |
ss | Seconds 00-59 | {0:ss} | 46 |
tt | AM or PM | {0:tt} | PM |
yy | Year, 2 digits | {0:yy} | 02 |
yyyy | Year | {0:yyyy} | 2002 |
zz | Timezone offset, 2 digits | {0:zz} | |
zzz | Full timezone offset | {0:zzz} | |
: | Separator | {0:hh:mm:ss} | 10:43:20 |
/ | Separator | {0:dd/MM/yyyy} | 10/12/2002 |
Enumerations
Specifier | Type |
g | Default (Flag names if available, otherwise decimal) |
f | Flags always |
d | Integer always |
x | Eight digit hex. |
Some Examples
Printf("\{0:$#,##0.00;($#,##0.00);Zero}", 1243.50); // prints 1,243.50
Printf("\{0:(###) ###-####}", 8005551212); // prints (800) 555-1212
How do I show numbers with 5 fixed digits with leading zeroes
$num1 = 123; $num2 = 45; $num3 = 123456; Printf("\{0:00000}\n", (int)$num1); // "00123" Printf("\{0:00000}\n", (int)$num2); // "00045" Printf("\{0:00000}\n", (int)$num3); // "123456" Printf("\{0:d5}\n", (int)$num1); // "00123" Printf("\{0:d5}\n", (int)$num2); // "00045" Printf("\{0:d5}\n", (int)$num3); // "123456"
Substitute a string for a value
Printf("\{0:yes;;no}\n", (int)1); // This will print "no" if value is 0, "yes" if value is 1. Printf("\{0:yes;;no}\n", (int)0); // This will print "no" if value is 0, "yes" if value is 1.
How to format as percentage without having the number multiplied by 100
Printf("\{0:##.00'%}\n", 1.23); // This will yield "1.23%".
How to use curly brackets within a formatted number
// Doubling them escapes them. For example: Printf("\{\{SomeString}}=\{0}","Hello"); // will produce: "{SomeString}=Hellow" Printf('{{SomeString}}={0}',"Hello"); // will produce: "{SomeString}=Hellow" Printf(@"{{SomeString}}={0}","Hello"); // will produce: "{SomeString}=Hellow"
What’s a good way to format currency
$val = 4219.6; Printf("\{0:$#,#.00;Call Us;Call Us}", $val); // This will return "$4,219.60". The .00 will force 2 decimals and the “;Call Us;Call Us” to show the text “Call Us” in place of negative and null values respectively. (Just in case)
How to format an integer, with commas for thousands
Printf("\{0:#,0}", (int)7770000); // 7,770,000
How to format a phone number to look like 800.555.1212
$tmp = SPrintf("\{0:###-###-####}", 8005551212); $result = Replace($tmp, "-","."); println($result); // Prints 800.555.1212
You could do it in one go example:
println(Replace(SPrintf("\{0:###-###-####}", 8005551212), "-",".")); // Prints 800.555.1212
Convert a number with a thousand separator to an int
$num = "1,000,000"; $val = (int)Replace($num, ",", ""); println($val); // Prints 1000000 and $val is now an int
Convert a number with a thousand separator to a double
$num = "1,000,000"; $val = (double)Replace($num, ",", ""); println($val); // Prints 1000000 and $val is now an double
How to convert from currency back to a number
This is not the best way to do it but i suppose it will do for now
$currency = 1337; $str = SPrintf("\{0:c}", $currency); // Currency converted to string $back = Replace(Replace(Replace($str, @CURRENCY, ""), ",", ""), ".", ""); // Currency converted back to string println($str); // Print the currency println($back); // Print the currency converted back to string
Remarks
The console supports printing unicode however it's also possible that your choice of Console font does not support that particular character. Click on the Windows Toolbar Menu (icon like C:.) and select Properties -> Font. Try some other fonts to see if they display your character properly.
Warning: If you expect to use int, byte, float etc in the params then you must cast it as such for example:
$myint = 100; $val = SPrintf("Value is 0x'\{0:x}'", (int)$myint); // The (int) will only take in $myint $myint = 100; $myint2 = 100; $val = SPrintf("Value is 0x'\{0:x}'", (int)($myint + $myint2)); // The (int) will now take in $myint AND $myint2
Note how $myint was cast as an int? using (int)$myint this is vital since if you dont do that it might send a string or a float you never really know with $variables so its best to cast it.
There is an alternative method example:
$myint = 100; $val = SPrintf("Value is 0x'\{0:x}'", int($myint));
Its up to you to decide which one to use.
If you wish to capture the output of Printf to create strings:
Go see SPrintf( <expression>, <expressions>... ) to Printf to strings.
Anything thats valid for Printf to print to console window is also valid for SPrintf to use to create strings.
Example
Printf("Value is 0x'\{0:x}'", (int)100) ; Prints 0x64 since the {0:x} is telling it to place param 0 as :x meaning hex