See Also edit
- everything is a string
- Format
- string forward compatibility
- Additional string functions
- string compare ...
- regmap, by SS
- apply scripts to matching substrings
Documentation edit
Synopsis edit
- string bytelength string
- string cat ?string ...?
(new in Tcl 8.6.2) - 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 edit
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 1Sadly, 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 edit
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)
MG: Since Tcl 8.5, an index in the string commands can include basic math;
string range $string $startChar+1 $endChar-1is 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 iterationUsing expr there is quite drastically faster...