Core Function Printf

From Sputnik Wiki
Revision as of 11:43, 3 December 2011 by UberFoX (Talk | contribs)
Jump to: navigation, search
SPrintf( <expression>, <expressions>... )

Contents

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

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 foramt string

"foramt {0}"

To use param 1

"foramt {1}"

To use param 0 and 3

"foramt {0} {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 dependant 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"
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
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox