'''[http://www.tcl.tk/man/tcl/TclCmd/string.htm%|%string]''' is an ensemble of [command%|%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 ** [http://www.tcl.tk/man/tcl/TclCmd/string.htm%|%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): * [string range] * [string index] * [string match] * [string length] * [string compare] (both objects must be ByteArrays) The following subcommands force promotion to unicode strings: * [string first] * [string last] * [string map] * [string replace] * [string reverse] ---- [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: ======none % set string "This is a test string" This is a test string % set startChar 3 3 % set endChar 12 12 ====== ======none % 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... <> Tcl Commands | Arts and Crafts of Tcl-Tk Programming | Command | Tcl | Data Structure | String Processing