String comparisons - compare match first last
wordend

There are 6 string subcommands that do pattern and string
matching. These are relatively fast operations, certainly faster
than regular expressions, albeit less powerful.

string comparestring1string2

Compares string1 to string2 and returns:

-1 ..... If string1 is less than string2

0 ........ If string1 is equal to
string2

1 ........ If string1 is greater than
string2

These comparisons are done alphabetically, not numerically - in
other words "a" is less than "b", and "10" is less than "2".

string firststring1string2

Returns the index of the character in string1 that starts the first match to string2, or -1 if there is no match.

string laststring1string2

Returns the index of the character in string1 that starts the last match to string2, or -1 if there is no match.

string wordendstringindex

Returns the index of the character just after the last one in
the word which contains the index'th
character of string. A word is any
contiguous set of letters, numbers or underscore characters, or a
single other character.

string wordstartstringindex

Returns the index of the character just before the first one in
the word which contains the index'th
character of string. A word is any
contiguous set of letters, numbers or underscore characters, or a
single other character.

string matchpatternstring

Returns 1 if the pattern matches string. The pattern is
a glob style pattern.

Example

set fullpath "/usr/home/clif/TCL_STUFF/TclTutor/Lsn.17"
set relativepath "CVS/Entries"
set directorypath "/usr/bin/"
set paths [list $fullpath $relativepath $directorypath]
foreach path $paths {
set first [string first "/" $path]
set last [string last "/" $path]
# Report whether path is absolute or relative
if {$first != 0} {
puts "$path is a relative path"
} else {
puts "$path is an absolute path"
}
# If "/" is not the last character in $path, report the last word.
# else, remove the last "/", and find the next to last "/", and
# report the last word.
incr last
if {$last != [string length $path]} {
set name [string range $path $last end]
puts "The file referenced in $path is $name"
} else {
incr last -2;
set tmp [string range $path 0 $last]
set last [string last "/" $tmp]
incr last;
set name [string range $tmp $last end]
puts "The final directory in $path is $name"
}
# CVS is a directory created by the CVS source code control system.
#
if {[string match "*CVS*" $path]} {
puts "$path is part of the source code control tree"
}
# Compare to "a" to determine whether the first char is upper or lower case
set comparison [string compare $name "a"]
if {$comparison >= 0} {
puts "$name starts with a lowercase letter\n"
} else {
puts "$name starts with an uppercase letter\n"
}
}