| Server IP : 82.208.35.60 / Your IP : 216.73.217.33 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/local/share/doc/slang/tm/rtl/ |
Upload File : |
#d n \__newline__
#d notearray_int_f_str2 \
This function has been vectorized in the sense that if an array of strings\n\
is passed for either of the string-valued arguments, then a\n\
corresponding array of integers will be returned. If two arrays\n\
are passed then the arrays must have the same length.
#d notearray_int_f_str \
This function has been vectorized in the sense that if an array of strings\n\
is passed to the function, then a corresponding array of integers\n\
will be returned.
#d notearray_str_f_str \
This function has been vectorized in the sense that if an array of strings\n\
is passed to the function, then a corresponding array of strings\n\
will be returned.
#d notearray_str_f_str_arg1 \
This function has been vectorized in the sense that if an array of strings\n\
is passed as the first argument then a corresponding array of strings\n\
will be returned. Array values are not supported for the remaining\n\
arguments.
#d notearray_strtrim \
This function has been vectorized in the sense that if the first argument\n\
is an array of strings, then a corresponding array of strings\n\
will be returned. An array value for the optional whitespace\n\
argument is not supported.
\function{count_char_occurrences}
\synopsis{Count the number of occurrences of a character in a string}
\usage{UInt_Type count_char_occurrences (str, ch)}
\description
This function returns the number of times the specified character
\exmp{ch} occurs in the string \exmp{str}.
\notes
If UTF-8 mode is in effect, then the character may correspond to
more than one byte. In such a case, the function returns the number
of such byte-sequences in the string. To count actual bytes, use
the \ifun{count_byte_occurrences} function.
\seealso{count_byte_occurrences}
\done
\function{create_delimited_string}
\synopsis{Concatenate strings using a delimiter}
\usage{String_Type create_delimited_string (delim, s_1, s_2, ..., s_n, n)}
#v+
String_Type delim, s_1, ..., s_n
Int_Type n
#v-
\description
\ifun{create_delimited_string} performs a concatenation operation on
the \exmp{n} strings \exmp{s_1}, ...,\exmp{s_n}, using the string
\exmp{delim} as a delimiter. The resulting string is equivalent to
one obtained via
#v+
s_1 + delim + s_2 + delim + ... + s_n
#v-
\example
#v+
create_delimited_string ("/", "user", "local", "bin", 3);
#v-
will produce \exmp{"usr/local/bin"}.
\notes
New code should use the \exmp{strjoin} function, which performs a
similar task.
\seealso{strjoin, is_list_element, extract_element, strchop, strcat}
\done
\function{extract_element}
\synopsis{Extract the nth element of a string with delimiters}
\usage{String_Type extract_element (String_Type list, Int_Type nth, Int_Type delim)}
\description
The \ifun{extract_element} function may be used to extract the
\exmp{nth} substring of a string delimited by the character given by
the \exmp{delim} parameter. If the string contains fewer than the
requested substring, the function will return \NULL. Substring
elements are numbered from 0.
\example
The expression
#v+
extract_element ("element 0, element 1, element 2", 1, ',')
#v-
returns the string \exmp{" element 1"}, whereas
#v+
extract_element ("element 0, element 1, element 2", 1, ' ')
#v-
returns \exmp{"0,"}.
The following function may be used to compute the number of elements
in the list:
#v+
define num_elements (list, delim)
{
variable nth = 0;
while (NULL != extract_element (list, nth, delim))
nth++;
return nth;
}
#v-
Alternatively, the \ifun{strchop} function may be more useful. In
fact, \ifun{extract_element} may be expressed in terms of the
function \ifun{strchop} as
#v+
define extract_element (list, nth, delim)
{
list = strchop(list, delim, 0);
if (nth >= length (list))
return NULL;
else
return list[nth];
}
#v-
and the \exmp{num_elements} function used above may be recoded more
simply as:
#v+
define num_elements (list, delim)
{
return length (strchop (length, delim, 0));
}
#v-
\notes
New code should make use of the \exmp{List_Type} object for lists.
\seealso{is_list_element, is_substr, strtok, strchop, create_delimited_string}
\done
\function{glob_to_regexp}
\synopsis{Convert a globbing expression to a regular expression}
\usage{String_Type glob_to_regexp (String_Type g)}
\description
This function may be used to convert a so-called globbing expression
to a regular expression. A globbing expression is frequently used
for matching filenames where '?' represents a single character and
'*' represents 0 or more characters.
\notes
The \slsh program that is distributed with the \slang library
includes a function called \sfun{glob} that is a wrapper around
\ifun{glob_to_regexp} and \ifun{listdir}. It returns a list of
filenames matching a globbing expression.
\seealso{string_match, listdir}
\done
\function{is_list_element}
\synopsis{Test whether a delimited string contains a specific element}
\usage{Int_Type is_list_element (String_Type list, String_Type elem, Int_Type delim)}
\description
The \ifun{is_list_element} function may be used to determine whether
or not a delimited list of substring, \exmp{list}, contains the element
\exmp{elem}. If \exmp{elem} is not an element of \exmp{list}, the function
will return zero, otherwise, it returns 1 plus the matching element
number.
\example
The expression
#v+
is_list_element ("element 0, element 1, element 2", "0,", ' ');
#v-
returns \exmp{2} since \exmp{"0,"} is element number one of the list
(numbered from zero).
\seealso{extract_element, is_substr, create_delimited_string}
\done
\function{is_substr}
\synopsis{Test for a specified substring within a string}
\usage{Int_Type is_substr (String_Type a, String_Type b)}
\description
This function may be used to determine if \exmp{a} contains the
string \exmp{b}. If it does not, the function returns 0; otherwise it
returns the position of the first occurrence of \exmp{b} in \exmp{a}
expressed in terms of characters, not bytes.
\notes
This function regards the first character of a string to be given by
a position value of 1.
The distinction between characters and bytes is significant in UTF-8
mode.
\notearray_int_f_str2
\seealso{substr, string_match, strreplace}
\done
\function{make_printable_string}
\synopsis{Format a string suitable for parsing}
\usage{String_Type make_printable_string(String_Type str)}
\description
This function formats a string in such a way that it may be used as
an argument to the \ifun{eval} function. The resulting string is
identical to \exmp{str} except that it is enclosed in double quotes
and the backslash, newline, control, and double quote characters are
expanded.
\seealso{eval, str_quote_string}
\done
\function{Sprintf}
\synopsis{Format objects into a string (deprecated)}
\usage{String_Type Sprintf (String_Type format, ..., Int_Type n)}
\description
This function performs a similar task as the \exmp{sprintf}
function but requires an additional argument that specifies the
number of items to format. For this reason, the \exmp{sprintf}
function should be used.
\seealso{sprintf, string, sscanf, vmessage}
\done
\function{strbskipchar}
\synopsis{Get an index to the previous character in a UTF-8 encoded string}
\usage{(p1, wch) = strbskipchar (str, p0 [,skip_combining])}
\description
This function moves backward from the 0-based byte-offset \exmp{p0}
in the string \exmp{str} to the previous character in the string.
It returns the byte-offset (\exmp{p1} of the previous character and
the decoded character value at that byte-offset.
The optional third argument specifies the handling of
combining characters. If it is non-zero, combining characters will
be ignored, otherwise a combining character will not be treated
differently from other characters. The default is to ignore such
characters.
If the byte-offset \exmp{p0} corresponds to the end of the string
(\exmp{p0=0}), then \exmp{(p0,0)} will be returned. Otherwise if
the byte-offset specifies a value that lies outside the string, an
\exc{IndexError} exception will be thrown. Finally, if the
byte-offset corresponds to an illegally coded character, the
character returned will be the negative byte-value at the position.
\seealso{strskipchar, strskipbytes}
\done
\function{sprintf}
\synopsis{Format objects into a string}
\usage{String_Type sprintf (String fmt, ...)}
\description
The \ifun{sprintf} function formats a string from a variable number
of arguments according to according to the format specification
string \exmp{fmt}.
The format string is a C library \cfun{sprintf} style format
descriptor. Briefly, the format string may consist of ordinary
characters (not including the \exmp{%} character), which are copied
into the output string as-is, and conversion specification sequences
introduced by the \exmp{%} character. The number of additional
arguments passed to the \ifun{sprintf} function must be consistent
with the number required by the format string.
The \exmp{%} character in the format string starts a conversion
specification that indicates how an object is to be formatted.
Usually the percent character is followed immediately by a
conversion specification character. However, it may optionally be
followed by flag characters, field width characters, and precision
modifiers, as described below.
The character immediately following the \exmp{%} character may be
one or more of the following flag characters:
#v+
- Use left-justification
# Use alternate form for formatting.
0 Use 0 padding
+ Precede a number by a plus or minus sign.
(space) Use a blank instead of a plus sign.
#v-
The flag characters (if any) may be followed by an optional field
width specification string represented by one or more digit
characters. If the size of the formatted object is less than the
field width, it will be right-justified in the specified field
width, unless the \exmp{-} flag was given, in which case it will be
left justified.
If the next character in the control sequence is a period, then it
introduces a precision specification sequence. The precision is
given by the digit characters following the period. If none are
given the precision is taken to be 0. The meaning of the precision
specifier depends upon the type of conversion: For integer
conversions, it gives the minimum number digits to appear in the
output. For \exmp{e} and \exmp{f} floating point conversions, it
gives the number of digits to appear after the decimal point. For
the \exmp{g} floating point conversion, it gives the maximum number
of significant digits to appear. Finally for the \exmp{s} and
\exmp{S} conversions it specifies the maximum number of characters
to be copied to the output string.
The next character in the sequence may be a modifier that controls
the size of object to be formatted. It may consist of the following
characters:
#v+
h This character is ignored in the current implementation.
l The integer is be formatted as a long integer, or a
character as a wide character.
#v-
Finally the conversion specification sequence ends with the
conversion specification character that describes how the object is
to be
formatted:
#v+
s as a string
f as a floating point number
e as a float using exponential form, e.g., 2.345e08
g format as e or f, depending upon its value
c as a character
b as a byte
% a literal percent character
d as a signed decimal integer
u as an unsigned decimal integer
o as an octal integer
X,x as hexadecimal
B as a binary integer
S convert object to a string and format accordingly
#v-
The \exmp{S} conversion specifier is a \slang extension which will
cause the corresponding object to be converted to a string using the
\ifun{string} function, and then converted as \exmp{s}. formatted as
string. In fact, \exmp{sprintf("%S",x)} is equivalent to
\exmp{sprintf("%s",string(x))}.
\example
#v+
sprintf("%s","hello") ===> "hello"
sprintf("%s %s","hello", "world") ===> "hello world"
sprintf("Agent %.3d",7) ===> "Agent 007"
sprintf("%S",PI) ===> "3.141592653589793"
sprintf("%g",PI) ===> "3.14159"
sprintf("%.2g",PI) ===> "3.1"
sprintf("%.2e",PI) ===> "3.14e+00"
sprintf("%.2f",PI) ===> "3.14"
sprintf("|% 8.2f|",PI) ===> "| 3.14|"
sprintf("|%-8.2f|",PI) ===> "|3.14 |"
sprintf("|%+8.2f|",PI) ===> "| +3.14|"
sprintf("|%8B|", 21) ===> "| 10101|"
sprintf("|%.8B|", 21) ===> "|00010101|"
sprintf("|%#.8B|", 21) ===> "|0b00010101|"
sprintf("%S",{1,2,3}) ===> "List_Type with 3 elements"
sprintf("%S",1+2i) ===> "(1 + 2i)"
#v-
\notes
The \ifun{set_float_format} function controls the format for the
\exmp{S} conversion of floating point numbers.
\seealso{string, sscanf, message, pack, set_float_format}
\done
\function{sscanf}
\synopsis{Parse a formatted string}
\usage{Int_Type sscanf (s, fmt, r1, ... rN)}
#v+
String_Type s, fmt;
Ref_Type r1, ..., rN
#v-
\description
The \ifun{sscanf} function parses the string \exmp{s} according to the
format \exmp{fmt} and sets the variables whose references are given by
\exmp{r1}, ..., \exmp{rN}. The function returns the number of
references assigned, or throws an exception upon error.
The format string \exmp{fmt} consists of ordinary characters and
conversion specifiers. A conversion specifier begins with the
special character \exmp{%} and is described more fully below. A white
space character in the format string matches any amount of whitespace
in the input string. Parsing of the format string stops whenever a
match fails.
The \exmp{%} character is used to denote a conversion specifier whose
general form is given by \exmp{%[*][width][type]format} where the
brackets indicate optional items. If \exmp{*} is present, then the
conversion will be performed but no assignment to a reference will be
made. The \exmp{width} specifier specifies the maximum field width to
use for the conversion. The \exmp{type} modifier is used to indicate
the size of the object, e.g., a short integer, as follows.
If \em{type} is given as the character \exmp{h}, then if the format
conversion is for an integer (\exmp{dioux}), the object assigned will
be a short integer. If \em{type} is \exmp{l}, then the conversion
will be to a long integer for integer conversions, or to a double
precision floating point number for floating point conversions.
The format specifier is a character that specifies the conversion:
#v+
% Matches a literal percent character. No assignment is
performed.
d Matches a signed decimal integer.
D Matches a long decimal integer (equiv to `ld')
u Matches an unsigned decimal integer
U Matches an unsigned long decimal integer (equiv to `lu')
i Matches either a hexadecimal integer, decimal integer, or
octal integer.
I Equivalent to `li'.
o Matches an unsigned octal integer.
O Matches an unsigned long octal integer.
x Matches an unsigned hexadecimal integer.
X Matches a long unsigned hexadecimal integer (same as `lx').
e,f,g Matches a decimal floating point number (Float_Type).
E,F,G Matches a double precision floating point number, same as `lf'.
s Matches a string of non-whitespace characters (String_Type).
c Matches one character. If width is given, width
characters are matched.
n Assigns the number of characters scanned so far.
[...] Matches zero or more characters from the set of characters
enclosed by the square brackets. If '^' is given as the
first character, then the complement set is matched.
#v-
\example
Suppose that \exmp{s} is \exmp{"Coffee: (3,4,12.4)"}. Then
#v+
n = sscanf (s, "%[a-zA-Z]: (%d,%d,%lf)", &item, &x, &y, &z);
#v-
will set \exmp{n} to \4, \exmp{item} to \exmp{"Coffee"}, \exmp{x} to \3,
\exmp{y} to \4, and \exmp{z} to the double precision number
\exmp{12.4}. However,
#v+
n = sscanf (s, "%s: (%d,%d,%lf)", &item, &x, &y, &z);
#v-
will set \exmp{n} to \1, \exmp{item} to \exmp{"Coffee:"} and the
remaining variables will not be assigned.
\seealso{sprintf, unpack, string, atof, int, integer, string_matches}
\done
\function{strbytelen}
\synopsis{Get the number of bytes in a string}
\usage{Int_Type strbytelen (String_Type s)}
\description
This function returns the number of bytes in a string. In UTF-8
mode, this value is generally different from the number of
characters in a string. For the latter information, the
\ifun{strlen} or \ifun{strcharlen} functions should be used.
\notes
\notearray_int_f_str
\seealso{strlen, strcharlen, length}
\done
\function{strbytesub}
\synopsis{Replace a byte with another in a string.}
\usage{String_Type strsub (String_Type s, Int_Type pos, UChar_Type b)}
\description
The \ifun{strbytesub} function may be be used to substitute the byte
\exmp{b} for the byte at byte position \exmp{pos} of the string
\exmp{s}. The resulting string is returned.
\notes
The first byte in the string \exmp{s} is specified by \exmp{pos}
equal to 1. This function uses byte semantics, not character
semantics.
\seealso{strsub, is_substr, strreplace, strbytelen}
\done
\function{strcat}
\synopsis{Concatenate strings}
\usage{String_Type strcat (String_Type a_1, ..., String_Type a_N)}
\description
The \ifun{strcat} function concatenates its N string
arguments \exmp{a_1}, ... \exmp{a_N} together and returns the result.
\example
#v+
strcat ("Hello", " ", "World");
#v-
produces the string \exmp{"Hello World"}.
\notes
This function is equivalent to the binary operation \exmp{a_1+...+a_N}.
However, \ifun{strcat} is much faster making it the preferred method
to concatenate strings.
\seealso{sprintf, strjoin}
\done
\function{strcharlen}
\synopsis{Get the number of characters in a string including combining characters}
\usage{Int_Type strcharlen (String_Type s)}
\description
The \ifun{strcharlen} function returns the number of characters in a
string. If the string contains combining characters, then they are
also counted. Use the \ifun{strlen} function to obtain the
character count ignoring combining characters.
\notes
\notearray_int_f_str
\seealso{strlen, strbytelen}
\done
\function{strchop}
\synopsis{Chop or split a string into substrings.}
\usage{String_Type[] strchop (String_Type str, Int_Type delim, Int_Type quote)}
\description
The \ifun{strchop} function may be used to split-up a string
\exmp{str} that consists of substrings delimited by the character
specified by \exmp{delim}. If the integer \exmp{quote} is non-zero,
it will be taken as a quote character for the delimiter. The
function returns the substrings as an array.
\example
The following function illustrates how to sort a comma separated
list of strings:
#v+
define sort_string_list (a)
{
variable i, b, c;
b = strchop (a, ',', 0);
i = array_sort (b);
b = b[i]; % rearrange
% Convert array back into comma separated form
return strjoin (b, ",");
}
#v-
\seealso{strchopr, strjoin, strtok}
\done
\function{strchopr}
\synopsis{Chop or split a string into substrings.}
\usage{String_Type[] strchopr (String_Type str, String_Type delim, String_Type quote)}
\description
This routine performs exactly the same function as \ifun{strchop} except
that it returns the substrings in the reverse order. See the
documentation for \ifun{strchop} for more information.
\seealso{strchop, strtok, strjoin}
\done
\function{strcmp}
\synopsis{Compare two strings}
\usage{Int_Type strcmp (String_Type a, String_Type b)}
\description
The \ifun{strcmp} function may be used to perform a case-sensitive
string comparison, in the lexicographic sense, on strings \exmp{a}
and \exmp{b}. It returns 0 if the strings are identical, a negative
integer if \exmp{a} is less than \exmp{b}, or a positive integer if
\exmp{a} is greater than \exmp{b}.
\example
The \ifun{strup} function may be used to perform a case-insensitive
string comparison:
#v+
define case_insensitive_strcmp (a, b)
{
return strcmp (strup(a), strup(b));
}
#v-
\notes
One may also use one of the binary comparison operators, e.g.,
\exmp{a > b}.
\notearray_int_f_str
\seealso{strup, strncmp}
\done
\function{strcompress}
\synopsis{Remove excess whitespace characters from a string}
\usage{String_Type strcompress (String_Type s, String_Type white)}
\description
The \ifun{strcompress} function compresses the string \exmp{s} by
replacing a sequence of one or more characters from the set
\exmp{white} by the first character of \exmp{white}. In addition, it
also removes all leading and trailing characters from \exmp{s} that
are part of \exmp{white}.
\example
The expression
#v+
strcompress (",;apple,,cherry;,banana", ",;");
#v-
returns the string \exmp{"apple,cherry,banana"}.
\notes
\notearray_str_f_str_arg1
\seealso{strtrim, strtrans, str_delete_chars}
\done
\function{string_match}
\synopsis{Match a string against a regular expression}
\usage{Int_Type string_match(String_Type str, String_Type pat [,Int_Type pos])}
\description
The \ifun{string_match} function returns zero if \exmp{str} does not
match the regular expression specified by \exmp{pat}. This function
performs the match starting at the first byte of the string. The
optional \exmp{pos} argument may be used to specify a different byte
offset (numbered from 1). This function returns the position in
bytes (numbered from 1) of the start of the match in \exmp{str}.
The exact substring matched may be found using
\ifun{string_match_nth}.
\notes
Positions in the string are specified using byte-offsets not
character offsets. The value returned by this function is measured
from the beginning of the string \exmp{str}.
The function is not yet UTF-8 aware. If possible, consider using
the \module{pcre} module for better, more sophisticated regular
expressions.
The \exmp{pos} argument was made optional in version 2.2.3.
\seealso{string_matches, string_match_nth, strcmp, strncmp}
\done
\function{string_match_nth}
\synopsis{Get the result of the last call to string_match}
\usage{(Int_Type pos, Int_Type len) = string_match_nth(Int_Type nth)}
\description
The \ifun{string_match_nth} function returns two integers describing
the result of the last call to \ifun{string_match}. It returns both
the zero-based byte-position of the \exmp{nth} submatch and
the length of the match.
By convention, \exmp{nth} equal to zero means the entire match.
Otherwise, \exmp{nth} must be an integer with a value 1 through 9,
and refers to the set of characters matched by the \exmp{nth} regular
expression enclosed by the pairs \exmp{\\(, \\)}.
\example
Consider:
#v+
variable matched, pos, len;
matched = string_match("hello world", "\([a-z]+\) \([a-z]+\)"R, 1);
if (matched)
(pos, len) = string_match_nth(2);
#v-
This will set \exmp{matched} to 1 since a match will be found at the
first byte position, \exmp{pos} to 6 since \exmp{w} is offset 6 bytes
from the beginning of the string, and \exmp{len} to 5 since
\exmp{"world"} is 5 bytes long.
\notes
The position offset is \em{not} affected by the value of the offset
parameter to the \ifun{string_match} function. For example, if the
value of the last parameter to the \ifun{string_match} function had
been 3, \exmp{pos} would still have been set to 6.
The \sfun{string_matches} function may be used as an alternative to
\sfun{string_match_nth}.
\seealso{string_match, string_matches}
\done
\function{string_matches}
\synopsis{Match a string against a regular expression and return the matches}
\usage{String_Type[] string_matches(String_Type str, String_Type pat [,Int_Type pos])}
\description
The \ifun{string_matches} function combines the functionality of
\ifun{string_match} and \ifun{string_match_nth}. Like
\ifun{string_match}, it matches the string \exmp{str} against
the regular expression \exmp{pat}. If the string does not match the
pattern the function will return \NULL. Otherwise, the function
will return an array of strings whose \exmp{ith} element is the string that
corresponds to the return value of the \ifun{string_match_nth}
function.
\example
#v+
strs = string_matches ("p0.5keV_27deg.dat",
"p\([0-9.]+\)keV_\([0-9.]+\)deg\.dat"R, 1);
% ==> strs[0] = "p0.5keV_27deg.dat"
% strs[1] = "0.5"
% strs[2] = "27"
strs = string_matches ("q0.5keV_27deg.dat",
"p\([0-9.]+\)keV_\([0-9.]+\)deg\.dat"R);
% ==> strs = NULL
#v-
\notes
The function is not yet UTF-8 aware. If possible, consider using
the \module{pcre} module for better, more sophisticated regular
expressions.
The \exmp{pos} argument was made optional in version 2.2.3.
\seealso{string_match, string_match_nth, strcmp, strncmp}
\done
\function{strjoin}
\synopsis{Concatenate elements of a string array}
\usage{String_Type strjoin (Array_Type a [, String_Type delim])}
\description
The \ifun{strjoin} function operates on an array of strings by joining
successive elements together separated with the optional delimiter
\exmp{delim}. If \exmp{delim} is not specified, then empty string
\exmp{""} will be used resulting in a concatenation of the elements.
\example
Suppose that
#v+
days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
#v-
Then \exmp{strjoin (days,"+")} will produce
\exmp{"Sun+Mon+Tue+Wed+Thu+Fri+Sat+Sun"}. Similarly,
\exmp{strjoin (["","",""], "X")} will produce \exmp{"XX"}.
\seealso{strchop, strcat}
\done
\function{strlen}
\synopsis{Compute the length of a string}
\usage{Int_Type strlen (String_Type a)}
\description
The \ifun{strlen} function may be used to compute the character
length of a string ignoring the presence of combining characters.
The \ifun{strcharlen} function may be used to count combining
characters as distinct characters. For byte-semantics, use the
\ifun{strbytelen} function.
\example
After execution of
#v+
variable len = strlen ("hello");
#v-
\exmp{len} will have a value of \exmp{5}.
\notes
\notearray_int_f_str
\seealso{strbytelen, strcharlen, bstrlen, length, substr}
\done
\function{strlow}
\synopsis{Convert a string to lowercase}
\usage{String_Type strlow (String_Type s)}
\description
The \ifun{strlow} function takes a string \exmp{s} and returns another
string identical to \exmp{s} except that all upper case characters
that are contained in \exmp{s} are converted converted to lower case.
\example
The function
#v+
define Strcmp (a, b)
{
return strcmp (strlow (a), strlow (b));
}
#v-
performs a case-insensitive comparison operation of two strings by
converting them to lower case first.
\notes
\notearray_str_f_str
\seealso{strup, tolower, strcmp, strtrim, define_case}
\done
\function{strnbytecmp}
\synopsis{Compare the first n bytes of two strings}
\usage{Int_Type strnbytecmp (String_Type a, String_Type b, Int_Type n)}
\description
This function compares the first \exmp{n} bytes of the strings
\exmp{a} and \exmp{b}. See the documentation for \ifun{strcmp} for
information about the return value.
\notes
\notearray_int_f_str2
\seealso{strncmp, strncharcmp, strcmp}
\done
\function{strncharcmp}
\synopsis{Compare the first n characters of two strings}
\usage{Int_Type strncharcmp (String_Type a, String_Type b, Int_Type n)}
\description
This function compares the first \exmp{n} characters of the strings
\exmp{a} and \exmp{b} counting combining characters as distinct
characters. See the documentation for \ifun{strcmp} for information
about the return value.
\notes
\notearray_int_f_str2
\seealso{strncmp, strnbytecmp, strcmp}
\done
\function{strncmp}
\synopsis{Compare the first few characters of two strings}
\usage{Int_Type strncmp (String_Type a, String_Type b, Int_Type n)}
\description
This function behaves like \ifun{strcmp} except that it compares only the
first \exmp{n} characters in the strings \exmp{a} and \exmp{b}.
See the documentation for \ifun{strcmp} for information about the return
value.
In counting characters, combining characters are not counted,
although they are used in the comparison. Use the
\ifun{strncharcmp} function if you want combining characters to be
included in the character count. The \ifun{strnbytecmp} function
should be used to compare bytes.
\example
The expression
#v+
strncmp ("apple", "appliance", 3);
#v-
will return zero since the first three characters match.
\notes
This function uses character semantics.
\notearray_int_f_str2
\seealso{strcmp, strlen, strncharcmp, strnbytecmp}
\done
\function{strreplace}
\synopsis{Replace one or more substrings}
\usage{(new,n) = strreplace(a, b, c, max_n)}
\altusage{new = strreplace(a, b, c)}
\description
The \ifun{strreplace} function may be used to replace one or more
occurrences of \exmp{b} in \exmp{a} with \exmp{c}. This function
supports two calling interfaces.
The first form may be used to replace a specified number of
substrings. If \exmp{max_n} is positive, then the first
\exmp{max_n} occurrences of \exmp{b} in \exmp{a} will be replaced.
Otherwise, if \exmp{max_n} is negative, then the last
\exmp{abs(max_n)} occurrences will be replaced. The function returns
the resulting string and an integer indicating how many replacements
were made.
The second calling form may be used to replace all occurrences of
\exmp{b} in \exmp{a} with \exmp{c}. In this case, only the
resulting string will be returned.
\example
The following function illustrates how \ifun{strreplace} may be used
to remove all occurrences of a specified substring:
#v+
define delete_substrings (a, b)
{
return strreplace (a, b, "");
}
#v-
\seealso{is_substr, strsub, strtrim, strtrans, str_delete_chars}
\done
\function{strskipbytes}
\synopsis{Skip a range of bytes in a byte string}
\usage{Int_Type strskipbytes (str, range [n0 [,nmax]])}
#v+
String_Type s;
String_Type range;
Int_Type n0, nmax;
#v-
\description
This function skips over a range of bytes in a string \exmp{str}.
The byte range to be skipped is specified by the \exmp{range}
parameter. Optional start (\exmp{n0}) and stop (\exmp{nmax})
(0-based) parameters may be used to specify the part of the input
string to be processed. The function returns a 0-based offset from
the beginning of the string where processing stopped.
See the documentation for the \ifun{strtrans} function for the
format of the range parameter.
\seealso{strskipchar, strbskipchar, strtrans}
\done
\function{strskipchar}
\synopsis{Get an index to the next character in a UTF-8 encoded string}
\usage{(p1, wch) = strskipchar (str, p0 [,skip_combining])}
\description
This function decodes the character at the 0-based byte-offset \exmp{p0} in
the string \exmp{str}. It returns the byte-offset (\exmp{p1} of the next
character in the string and the decoded character at byte-offset
\exmp{p0}.
The optional third argument specifies the handling of
combining characters. If it is non-zero, combining characters will
be ignored, otherwise a combining character will not be treated
differently from other characters. The default is to ignore such
characters.
If the byte-offset \exmp{p0} corresponds to the end of the string,
then \exmp{(p0,0)} will be returned. Otherwise if the byte-offset
specifies a value that lies outside the string, an \exc{IndexError}
exception will be thrown. Finally, if the byte-offset corresponds
to an illegally coded character, the character returned will be the
negative byte-value at the position.
\example
The following is an example of a function that skips alphanumeric
characters and returns the new byte-offset.
#v+
private define skip_word_chars (line, p)
{
variable p1 = p, ch;
do
{
p = p1;
(p1, ch) = strskipchar (line, p, 1);
}
while (isalnum(ch));
return p;
}
#v-
\notes
In non-UTF-8 mode (\exmp{_slang_utf8_ok=0}), this function is
equivalent to:
#v+
define strskipchar (s, p)
{
if ((p < 0) || (p > strlen(s)))
throw IndexError;
if (p == strlen(s))
return (p, s[p])
return (p+1, s[p]);
}
#v-
It is important to understand that the above code relies upon
byte-semantics, which are invalid for multi-byte characters.
\seealso{strbskipchar, strskipbytes}
\done
\function{strsub}
\synopsis{Replace a character with another in a string.}
\usage{String_Type strsub (String_Type s, Int_Type pos, Int_Type ch)}
\description
The \ifun{strsub} function may be used to substitute the character
\exmp{ch} for the character at character position \exmp{pos} of the string
\exmp{s}. The resulting string is returned.
\example
#v+
define replace_spaces_with_comma (s)
{
variable n;
while (n = is_substr (s, " "), n) s = strsub (s, n, ',');
return s;
}
#v-
For uses such as this, the \ifun{strtrans} function is a better choice.
\notes
The first character in the string \exmp{s} is specified by \exmp{pos}
equal to 1. This function uses character semantics, not byte
semantics.
\seealso{is_substr, strreplace, strlen}
\done
\function{strtok}
\synopsis{Extract tokens from a string}
\usage{String_Type[] strtok (String_Type str [,String_Type white])}
\description
\ifun{strtok} breaks the string \exmp{str} into a series of tokens
and returns them as an array of strings. If the second parameter
\exmp{white} is present, then it specifies the set of characters
that are to be regarded as whitespace when extracting the tokens,
and may consist of the whitespace characters or a range of such
characters. If the first character of \exmp{white} is \exmp{'^'},
then the whitespace characters consist of all characters except
those in \exmp{white}. For example, if \exmp{white} is \exmp{"
\\t\\n,;."}, then those characters specify the whitespace
characters. However, if \exmp{white} is given by
\exmp{"^a-zA-Z0-9_"}, then any character is a whitespace character
except those in the ranges \exmp{a-z}, \exmp{A-Z}, \exmp{0-9}, and
the underscore character. To specify the hyphen character as a
whitespace character, then it should be the first character of the
whitespace string. In addition to ranges, the whitespace specifier
may also include character classes:
#v+
\w matches a unicode "word" character, taken to be alphanumeric.
\a alphabetic character, excluding digits
\s matches whitespace
\l matches lowercase
\u matches uppercase
\d matches a digit
\\ matches a backslash
\^ matches a ^ character
#v-
If the second parameter is not present, then it defaults to
\exmp{"\\s"}.
\example
The following example may be used to count the words in a text file:
#v+
define count_words (file)
{
variable fp, line, count;
fp = fopen (file, "r");
if (fp == NULL) return -1;
count = 0;
while (-1 != fgets (&line, fp))
{
line = strtok (line, "^\\a");
count += length (line);
}
() = fclose (fp);
return count;
}
#v-
Here a word was assumed to consist only of alphabetic characters.
\seealso{strchop, strcompress, strjoin}
\done
\function{strtrans}
\synopsis{Replace characters in a string}
\usage{String_Type strtrans (str, old_set, new_set)}
#v+
String_Type str, old_set, new_set;
#v-
\description
The \ifun{strtrans} function may be used to replace all the characters
from the set \exmp{old_set} with the corresponding characters from
\exmp{new_set} in the string \exmp{str}. If \exmp{new_set} is empty,
then the characters in \exmp{old_set} will be removed from \exmp{str}.
If \exmp{new_set} is not empty, then \exmp{old_set} and
\exmp{new_set} must be commensurate. Each set may consist of
character ranges such as \exmp{A-Z} and character classes:
#v+
\, matches a punctuation character
\7 matches any 7bit ascii character
\\ matches a backslash
\^ matches the ^ character
\a matches an alphabetic character, excluding digits
\c matches a control character
\d matches a digit
\g matches a graphic character
\l matches lowercase
\p matches a printable character
\s matches whitespace
\u matches uppercase
\w matches a unicode "word" character, taken to be alphanumeric.
\x matches hex digit (a-fA-F0-9)
#v-
If the first character of a set is \exmp{^} then the set is taken to
be the complement set.
\example
#v+
str = strtrans (str, "\\u", "\\l"); % lower-case str
str = strtrans (str, "^0-9", " "); % Replace anything but 0-9 by space
str = strtrans (str, "\\^0-9", " "); % Replace '^' and 0-9 by a space
#v-
\notes
\notearray_str_f_str_arg1
\seealso{strreplace, strtrim, strup, strlow}
\done
\function{strtrim}
\synopsis{Remove whitespace from the ends of a string}
\usage{String_Type strtrim (String_Type s [,String_Type w])}
\description
The \ifun{strtrim} function removes all leading and trailing whitespace
characters from the string \exmp{s} and returns the result. The
optional second parameter specifies the set of whitespace
characters. If the argument is not present, then the set defaults
to \exmp{"\\s"}. The whitespace specification may consist of
character ranges such as \exmp{A-Z} and character classes:
#v+
\w matches a unicode "word" character, taken to be alphanumeric.
\a alphabetic character, excluding digits
\s matches whitespace
\l matches lowercase
\u matches uppercase
\d matches a digit
\\ matches a backslash
\^ matches a ^ character
#v-
If the first character of a set is \exmp{^} then the set is taken to
be the complement set.
\notes
\notearray_strtrim
\seealso{strtrim_beg, strtrim_end, strcompress}
\done
\function{strtrim_beg}
\synopsis{Remove leading whitespace from a string}
\usage{String_Type strtrim_beg (String_Type s [,String_Type w])}
\description
The \ifun{strtrim_beg} function removes all leading whitespace
characters from the string \exmp{s} and returns the result.
The optional second parameter specifies the set of whitespace
characters. See the documentation for the \ifun{strtrim} function
form more information about the whitespace parameter.
\notes
\notearray_strtrim
\seealso{strtrim, strtrim_end, strcompress}
\done
\function{strtrim_end}
\synopsis{Remove trailing whitespace from a string}
\usage{String_Type strtrim_end (String_Type s [,String_Type w])}
\description
The \ifun{strtrim_end} function removes all trailing whitespace
characters from the string \exmp{s} and returns the result. The
optional second parameter specifies the set of whitespace
characters. See the documentation for the \ifun{strtrim} function
form more information about the whitespace parameter.
\notes
\notearray_strtrim
\seealso{strtrim, strtrim_beg, strcompress}
\done
\function{strup}
\synopsis{Convert a string to uppercase}
\usage{String_Type strup (String_Type s)}
\description
The \ifun{strup} function takes a string \exmp{s} and returns another
string identical to \exmp{s} except that all lower case characters
that contained in \exmp{s} are converted to upper case.
\example
The function
#v+
define Strcmp (a, b)
{
return strcmp (strup (a), strup (b));
}
#v-
performs a case-insensitive comparison operation of two strings by
converting them to upper case first.
\notes
\notearray_str_f_str
\seealso{strlow, toupper, strcmp, strtrim, define_case, strtrans}
\done
\function{str_delete_chars}
\synopsis{Delete characters from a string}
\usage{String_Type str_delete_chars (String_Type str [, String_Type del_set])}
\description
This function may be used to delete the set of characters specified
by the optional argument \exmp{del_set} from the string \exmp{str}.
If \exmp{del_set} is not given, \exmp{"\\s"} will be used.
The modified string is returned.
The set of characters to be deleted may include ranges such as
\exmp{A-Z} and characters classes:
#v+
\w matches a unicode "word" character, taken to be alphanumeric.
\a alphabetic character, excluding digits
\s matches whitespace
\l matches lowercase
\u matches uppercase
\d matches a digit
\\ matches a backslash
\^ matches a ^ character
#v-
If the first character of \exmp{del_set} is \exmp{^}, then the set
is taken to be the complement of the remaining string.
\example
#v+
str = str_delete_chars (str, "^A-Za-z");
#v-
will remove all characters except \exmp{A-Z} and \exmp{a-z} from
\exmp{str}. Similarly,
#v+
str = str_delete_chars (str, "^\\a");
#v-
will remove all but the alphabetic characters.
\notes
\notearray_str_f_str_arg1
\seealso{strtrans, strreplace, strcompress}
\done
\function{str_quote_string}
\synopsis{Escape characters in a string.}
\usage{String_Type str_quote_string(String_Type str, String_Type qlis, Int_Type quote)}
\description
The \ifun{str_quote_string} returns a string identical to \exmp{str}
except that all characters contained in the string \exmp{qlis} are
escaped with the \exmp{quote} character, including the quote
character itself. This function is useful for making a string that
can be used in a regular expression.
\example
Execution of the statements
#v+
node = "Is it [the coat] really worth $100?";
tag = str_quote_string (node, "\\^$[]*.+?", '\\');
#v-
will result in \exmp{tag} having the value:
#v+
Is it \[the coat\] really worth \$100\?
#v-
\seealso{str_uncomment_string, make_printable_string}
\done
\function{str_replace}
\synopsis{Replace a substring of a string (deprecated)}
\usage{Int_Type str_replace (String_Type a, String_Type b, String_Type c)}
\description
The \ifun{str_replace} function replaces the first occurrence of \exmp{b} in
\exmp{a} with \exmp{c} and returns an integer that indicates whether a
replacement was made. If \exmp{b} does not occur in \exmp{a}, zero is
returned. However, if \exmp{b} occurs in \exmp{a}, a non-zero integer is
returned as well as the new string resulting from the replacement.
\notes
This function has been superseded by \ifun{strreplace}. It should no
longer be used.
\seealso{strreplace}
\done
\function{str_uncomment_string}
\synopsis{Remove comments from a string}
\usage{String_Type str_uncomment_string(String_Type s, String_Type beg, String_Type end)}
\description
This function may be used to remove simple forms of comments from a
string \exmp{s}. The parameters, \exmp{beg} and \exmp{end}, are strings
of equal length whose corresponding characters specify the begin and
end comment characters, respectively. It returns the uncommented
string.
\example
The expression
#v+
str_uncomment_string ("Hello (testing) 'example' World", "'(", "')")
#v-
returns the string \exmp{"Hello World"}.
\notes
This routine does not handle multi-character comment delimiters and it
assumes that comments are not nested.
\seealso{str_quote_string, str_delete_chars, strtrans}
\done
\function{substr}
\synopsis{Extract a substring from a string}
\usage{String_Type substr (String_Type s, Int_Type n, Int_Type len)}
\description
The \ifun{substr} function returns a substring with character length
\exmp{len} of the string \exmp{s} beginning at the character position
\exmp{n}. If \exmp{len} is \exmp{-1}, the entire length of the string
\exmp{s} will be used for \exmp{len}. The first character of \exmp{s}
is given by \exmp{n} equal to 1.
\example
#v+
substr ("To be or not to be", 7, 5);
#v-
returns \exmp{"or no"}
\notes
This function assumes character semantics and not byte semantics.
Use the \ifun{substrbytes} function to extract bytes from a string.
\seealso{is_substr, substrbytes, strlen}
\done
\function{substrbytes}
\synopsis{Extract a byte sequence from a string}
\usage{String_Type substrbytes (String_Type s, Int_Type n, Int_Type len)}
\description
The \ifun{substrbytes} function returns a substring with byte length
\exmp{len} of the string \exmp{s} beginning at the byte position
\exmp{n}, counting from 1. If \exmp{len} is \exmp{-1}, the entire
byte-length of the string \exmp{s} will be used for \exmp{len}. The first
byte of \exmp{s} is given by \exmp{n} equal to 1.
\example
#v+
substrbytes ("To be or not to be", 7, 5);
#v-
returns \exmp{"or no"}
\notes
In many cases it is more convenient to use array indexing rather
than the \ifun{substrbytes} function. In fact
\exmp{substrbytes(s,i+1,-1)} is equivalent to
\exmp{s[[i:]]}.
The function \ifun{substr} may be used if character semantics are
desired.
\seealso{substr, strbytelen}
\done
\function{wchars_to_string,string_to_wchars}
\synopsis{Convert a UTF-8 encoded string to and from character codes}
\usage{Int_Type[] string_to_wchars(String_Type str)
String_Type wchars_to_string(Int_Type[] array)
}
\description
The \ifun{string_to_wchars} function decodes a UTF-8 encoded string
and returns the Unicode characters as an array of integer values. The
\ifun{wchars_to_string} performs the opposite conversion to produce a
UTF-8 encoded string from an array of Unicode characters.
\notes
A malformed UTF-8 encoded string will result in negative byte-values in the
output array at the positions corresponding to the malformed sequence.
For example, the following function will substitute a '?' character
for each byte in the malformed sequence to produce a valid string:
#v+
define handle_malformed_bytes (str)
{
variable codes = string_to_wchars (str);
variable is_bad = (codes < 0);
if (any(is_bad))
{
codes[where(is_bad)] = '?';
str = wchars_to_string (codes);
}
return str;
}
#v-
\seealso{char, substr, array_to_bstring, bstring_to_array}
\done