Core Function Printf

From Sputnik Wiki
(Difference between revisions)
Jump to: navigation, search
(Some Examples)
m (1 revision)
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
<pre>
 
<pre>
SPrintf( <expression>, <expressions>... )
+
Printf( <format control>, <params> )
 
</pre>
 
</pre>
  
 
=== Description ===
 
=== Description ===
  
Create a formatted string.
+
Prints a formatted string (similar to the C printf() function).
  
=== expression ===
+
=== Parameters ===
  
The format string and flags to use (see Remarks).
+
==== format control ====
  
==== expressions ====
+
See [[Core Function SPrintf|SPrintf( <format control>, <params> )]] for format control.
  
Variables that will be output according to the "Format Control".
+
==== params ====
 +
 
 +
See [[Core Function SPrintf|SPrintf( <format control>, <params> )]] for params.
  
 
=== Return Value ===
 
=== Return Value ===
  
Success: Returns the formatted string.  
+
None.
 
+
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:
+
 
+
<syntaxhighlight lang="sputnik">
+
Printf("->{0,10}<-\n", "Hello")
+
Printf("->{0,-10}<-\n", "Hello")
+
; Generates
+
; ->    Hello<-
+
; ->Hello    <-
+
</syntaxhighlight>
+
 
+
==== Numbers ====
+
 
+
Basic number formatting specifiers:
+
 
+
{| border="1" align="left" style="text-align:center;"
+
|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:
+
 
+
{| border="1" align="left" style="text-align:center;"
+
|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.
+
 
+
{| border="1" align="left" style="text-align:center;"
+
|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: ====
+
 
+
In the examples below a @DateTimeNow was used.
+
 
+
{| border="1" align="left" style="text-align:center;"
+
|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}
+
|-05
+
|-
+
|zzz
+
|Full timezone offset
+
|{0:zzz}
+
|-05:00
+
|-
+
|:
+
|Separator
+
|{0:hh:mm:ss}
+
|10:43:20
+
|-
+
|/
+
|Separator
+
|{0:dd/MM/yyyy}
+
|10/12/2002
+
|}
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
==== Enumerations ====
+
 
+
{| border="1" align="left" style="text-align:center;"
+
|Specifier
+
|Type
+
|-
+
|g
+
|Default (Flag names if available, otherwise decimal)
+
|-
+
|f
+
|Flags always
+
|-
+
|d
+
|Integer always
+
|-
+
|x
+
|Eight digit hex.
+
|}
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
 
+
==== Some Examples ====
+
 
+
<syntaxhighlight lang="sputnik">
+
Printf("{0:$#,##0.00;($#,##0.00);Zero}", 1243.50) ; prints 1,243.50
+
</syntaxhighlight>
+
 
+
 
+
<syntaxhighlight lang="sputnik">
+
Printf("{0:(###) ###-####}", 8005551212) ; prints (800) 555-1212
+
</syntaxhighlight>
+
 
+
===== How do I show numbers with 5 fixed digits with leading zeroes =====
+
 
+
<syntaxhighlight lang="sputnik">
+
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"
+
</syntaxhighlight>
+
 
+
===== Substitute a string for a value =====
+
 
+
<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)0) ; This will print "no" if value is 0, "yes" if value is 1.
+
</syntaxhighlight>
+
 
+
===== How to format as percentage without having the number multiplied by 100 =====
+
 
+
<syntaxhighlight lang="sputnik">
+
Printf("{0:##.00'%}\n", 1.23) ; This will yield "1.23%".
+
</syntaxhighlight>
+
 
+
===== How to use curly brackets within a formatted number =====
+
 
+
<syntaxhighlight lang="sputnik">
+
; Doubling them escapes them. For example:
+
Printf("{{SomeString}}={0}","Hello") ; will produce: "{SomeString}=Hellow"
+
</syntaxhighlight>
+
 
+
===== What’s a good way to format currency =====
+
 
+
<syntaxhighlight lang="sputnik">
+
$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)
+
</syntaxhighlight>
+
 
+
===== How to format an integer, with commas for thousands =====
+
 
+
<syntaxhighlight lang="sputnik">
+
Printf("{0:#,0}", (int)7770000) ; 7,770,000
+
</syntaxhighlight>
+
 
+
===== How to format a phone number to look like 800.555.1212 =====
+
 
+
<syntaxhighlight lang="sputnik">
+
$tmp = SPrintf("{0:###-###-####}", "8005551212")
+
$result = Replace($tmp, "-",".")
+
println($result) ; Prints 800.555.1212
+
</syntaxhighlight>
+
 
+
You could do it in one go example:
+
 
+
<syntaxhighlight lang="sputnik">
+
println(Replace(SPrintf("{0:###-###-####}", "8005551212"), "-",".")) ; Prints 800.555.1212
+
</syntaxhighlight>
+
 
+
===== Convert a number with a thousand separator to an int =====
+
 
+
<syntaxhighlight lang="sputnik">
+
$num = "1,000,000"
+
$val = (int)Replace($num, ",", "")
+
println($val) ; Prints 1000000 and $val is now an int
+
</syntaxhighlight>
+
===== Convert a number with a thousand separator to a double =====
+
 
+
<syntaxhighlight lang="sputnik">
+
$num = "1,000,000"
+
$val = (double)Replace($num, ",", "")
+
println($val) ; Prints 1000000 and $val is now an double
+
</syntaxhighlight>
+
 
+
===== 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
+
 
+
<syntaxhighlight lang="sputnik">
+
$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
+
</syntaxhighlight>
+
  
 
=== Remarks ===
 
=== Remarks ===
  
Warning: If you expect to use int, byte, float etc in the params then you must cast it as such for example:
+
This is basically a wrapper for the [[Core Function SPrintf|SPrintf( <format control>, <params> )]] function so it will do exactly what that function does but print the result instantly and return no string.
 
+
<syntaxhighlight lang="sputnik">
+
$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
+
</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.
+
 
+
There is an alternative method example:
+
 
+
<syntaxhighlight lang="sputnik">
+
$myint = 100
+
$val = SPrintf("Value is 0x'{0:x}'", int($myint))
+
</syntaxhighlight>
+
 
+
Its up to you to decide which one to use.
+
 
+
If you wish to capture the output of Printf to create strings:
+
 
+
Go see [[Core Function SPrintf|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.
+
See [[Core Function SPrintf|SPrintf( <format control>, <params> )]] for remarks.
  
 
=== Example ===
 
=== Example ===
  
<syntaxhighlight lang="sputnik">
+
See [[Core Function SPrintf|SPrintf( <format control>, <params> )]] for 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
+
</syntaxhighlight>
+
  
 
[[Category:Core Function]]
 
[[Category:Core Function]]

Latest revision as of 12:38, 14 June 2015

Printf( <format control>, <params> )

Contents

Description

Prints a formatted string (similar to the C printf() function).

Parameters

format control

See SPrintf( <format control>, <params> ) for format control.

params

See SPrintf( <format control>, <params> ) for params.

Return Value

None.

Remarks

This is basically a wrapper for the SPrintf( <format control>, <params> ) function so it will do exactly what that function does but print the result instantly and return no string.

See SPrintf( <format control>, <params> ) for remarks.

Example

See SPrintf( <format control>, <params> ) for example.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox