Version 54 of string

Updated 2014-05-11 17:30:09 by RLE

string is an ensemble of commands for manipulating strings.

See Also

everything is a string
Format
string forward compatibility
Additional string functions
string compare ...
regmap, by SS
apply scripts to matching substrings

Documentation

official reference

Synopsis

string bytelength string
string compare ?-nocase? ?-length int? string1 string2
string equal ?-nocase? ?-length int? string1 string2
string first string1 string2 ?startIndex?
string index string charIndex
string is class ?-strict? ?-failindex varname? string
string last string1 string2 ?startIndex?
string length string
string map ?-nocase? charMap string
string match ?-nocase? pattern string
string range string first last
string repeat string count
string replace string first last ?newstring?
string reverse string
string tolower string ?first? ?last?
string totitle string ?first? ?last?
string toupper string ?first? ?last?
string trim string ?chars?
string trimleft string ?chars?
string trimright string ?chars?
string wordend string charIndex
string wordstart string charIndex

Misc

Is this correct behavior?

% set str {} 
% string is true $str
1
% string is false $str
1
% string is integer $str
1
% string is alpha $str
1

Sadly, yes, that is correct. You'll have to use the -strict option to keep empty strings from passing all tests.

This is an unfortunate legacy from the origin of string is as a tool for entry validation, where it's important the empty string pass everything so that every input doesn't fail immediately.

Using string functions for binary data

The following subcommands check for the ByteArray object type internally based on their bytecode versions (as of 8.5.0):

The following subcommands force promotion to unicode strings:


MG: Since Tcl 8.5, an index in the string commands can include basic math;

string range $string $startChar+1 $endChar-1

is now equivalent to

string range $string [expr {$startChar + 1}] [expr {$endChar - 1}]

While the first may be clearer, though, it seems to be (potentially quite a lot) slower for me, running 8.5a6:

% set string "This is a test string"
This is a test string
% set startChar 3
3
% set endChar 12
12
% time {string range $string [expr {$startChar+1}] [expr {$endChar-1}]} 500000
2.55498 microseconds per iteration
% time {string range $string $startChar+1 $endChar-1} 500000
5.092856 microseconds per iteration

Using expr there is quite drastically faster...