string$ = SPRINTF(string_format$, arg1, arg2, .. )
The name stands for "String Print-Formatted". The function name was chosen to match the name of similar
functions found in programming languages such as C, C++, Java, Javascript, PYTHON, etc.
Unlike other implimentations, the Sheerpower SPRINTF() function is highly
optimized and very fast.
Given the formatting string and a list of optional arguments, returns the string result of the
arguments applied to the format. The arguments can be of any data type.
Simple Formatting Examples
Each
% within the formatting string marks where the content of the additional arguments are
substituted into the string. Each
% marks the beginning of a
format and is followed
by an optional letter and other specifications.
Simple Substitution
age = 33
print sprintf('Age is %', age)
Age is 33
name$ = 'Sally Sue'
age = 22
note$ = sprintf ('% is %', name$, age)
print 'Here is my note: '; note$
Here is my note: Sally Sue is 22
Real and integer Formatting
In Sheerpower, the
r and
i formats are used for numeric values,
representing Real and Integer types, respectively. For compatibility with other
implementations of sprintf, the
f format can also be used for Real numbers,
and the
d format can also be used for Integer numbers.
print sprintf('PI is about %r', pi)
print sprintf('PI is about %i', pi)
PI is about 3.1415926535897932
PI is about 3
Using a
.n after the %, we can specify the number (.n) of decimal digits. This also rounds the number.
For example, we might want to show a real rounded to three decimal digits:
print sprintf('PI is about %.3r', 3.14159265)
PI is about 3.142
Singulars and Plurals
One Sheerpower specific format is
%p, which produces a word in its plural form if needed.
The last numeric value that precedes the
%p format determines if the word is
produced as a singular or plural.
ox_counter = 56
print sprintf('I have % %p.', ox_counter, 'ox')
I have 56 oxen.
ox_counter = 1
print sprintf('I have % %p.', ox_counter, 'ox')
I have 1 ox.
print sprintf('%p', 'foot')
feet
Dates and times
To format dates and times you use the
%t formatter followed by date/time item names.
Item names have a
@ prefix. The sprintf() argument is the time in
seconds as calculated by the
seconds() function. If the seconds given is zero, then the
current date and time is used.
The date/time item names are:
- @yyyy -- Four digit year -- 2022
- @yy -- Two digit year -- 22
- @month -- Month name -- January
- @mon -- Short month name -- Jan
- @mm2 -- Two digit month -- 09
- @mm -- One or Two digit month -- 9 or 10
- @dd2 -- Two digit day -- 09
- @dd -- One or two digit day number -- 9 or 10
- @h2 -- Two digit hour -- 09
- @h -- On or two digit hour -- 9 or 10
- @mt -- Military time -- 14
- @m2 -- two digit minute -- 09
- @m -- One or two digit minute -- 9 or 10
- @s2 -- Two digit seconds -- 09
- @s -- one or Two digit seconds -- 9 or 10
- @ampm -- AM or PM indictor
- @day -- Day of the week -- Monday
- @mil -- military datetime -- 15-Jun-2022 07:38:10
- @short -- short length datetime -- Jun09 13:54
If no prefixed item is given, the default of
@short is used.
If no sprintf() argument is given, the
current datetime is used. The formatting of @short is highly optimized.
Over 10 million per second can be formatted.
This makes it ideal for inclusion into log files.
f$ = "%tThe party is @month (month# @mm) @dd, @yyyy @mt:@m2:@s2 - or @h2:@m2:@s2 @ampm on a @day"
now_secs = seconds('')
print sprintf(f$, now_secs)
The party is June (month# 6) 10, 2022 05:32:28 - or 05:32:28 AM on a Monday
f$ = '%t@month @dd2-@mon-@yyyy'
now_secs = seconds('20221225 0000')
print sprintf(f$, now_secs)
December 25-Dec-2022
print sprintf(%t@mil Processing starting')
15-Jun-2022 08:26:47 Processing starting
print sprintf(%t@short Processing starting')
Jun09 15:11 Processing starting
print sprintf('%t Processing started')
Jun09 15:11 Processing started
Dealing With String Substitutions
Often strings need to be formatted in specific ways. The
%z format is used for this
purpose. It supports two methods --
each character in turn substitutions using the "@" and
segment substitutions using "[]":
ssn$ = '123456789'
print sprintf('%z SSN: @@@-@@-@@@@', ssn$)
print sprintf('%z SSN: [1:3]-[4:5]-[6:9]', ssn$)
Segments are the most versatile of the two methods. For each segment,
specify
[aaa:zzz] where
aaa
is the starting location in the string and
zzz is the ending location. Note that the first
location is one and the last location is the length of the string. The word "end" stands for the
end of the string.
Within the "[]" one can also
include the additional formatting options of "uc" or "lc" for uppercasing or lowercasing
the segment:
a$='abcdefGHI'
print sprintf('%z[uc:1:3]-[4:5]-[lc:6:end]', a$)
ABC-de-fghi
Formatting Money and Large Numbers
Another Sheerpower specific format is
%m, which inserts commas into numbers as needed.
It is frequently used when formatting money or large numbers.
The
.2 in the example below says two decimal digits will be returned. The number will also
be rounded as needed.
cash = 1234567.887
print sprintf('About $ %.2m', cash)
About $ 1,234,567.89
Positioning with Horizontal Tabs
Sheerpower also supports a horizontal tab format using
%h. The argument
value is the tab position. Tab position one is the first position.
tab_pos = 15
age = 45
print sprintf('The age was: %h%i',tab_pos, age)
The age was: 45
Column Alignment
Column alignment is accomplished by specifying the fixed width of a given number or string.
The width is specified by supplying a number directly after the %. For example,
to give a fixed width of 10 characters:
print sprintf('Number: %10i and more.', 123)
Number: 123 and more.
By default, numbers are right-justified within columns. To left-justify a number, give
a negative column width:
print sprintf('Number: %-10i and more.', 123)
Number: 123 and more.
Octal, Hexadecimal, and Binary
The %o, %x, and %b are used to format numbers into octal, hexadecimal, and binary.
print sprintf('%i in Octal: %o Hex: %x Binary: %b', 123, 123, 123, 123)
123 in Octal: 173 Hex: 7b Binary: 1111011
Embedding Special Characters
Sometimes there is a need to embed special characters into the format. The "\" (back-slash) is
used for this purpose. For example, to insert a "new line" character into the format
use
\n. For example:
print sprintf ('Hello\nWorld')
Hello
World
Below is the full list of special characters:
Combination | Result |
\b | Backspace |
\f | Form-feed |
\n | New line |
\r | Return |
\t | Tab |
\0nnn | Generate a character based
on the octal value
of nnn
For example \0102 >> B
|
\\ | The "\" character |
print sprintf ('The letter (\0102)')
The letter (B)
Note: The SPRINTF function has many other formatting options. For details,
see the "PRINTF Parameters" section
here.
The
%h,
%m,
%p,
%t, and
%z formats are Sheerpower specific.
SPRINTF() and Program Safety
Sheerpower's implementation of SPRINTF() is completely safe. If a wrong data type is passed, Sheerpower
will attenpt to coerce it to the correct data type. If this cannot be done, an exception is
raised, explaining the problem. If too few or too many arguments are passed,
an exception is raised. In no case will the Sheerpower runtime environment crash when processing
the SPRINTF() function.