. String comparisons - compare match first last wordend .
[ Previous | Index | Next ]
There are 6 string subcommands that do pattern and string matching.
- string compare string1 string2
- 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 lexicographically, not numerically.
- string first string1 string2
- Returns the index of the character in string1 that starts the first match to string2, or -1 if there is no match to string2 in string1
- string last string1 string2
- Returns the index of the character in string1 that starts the last match to string2, or -1 if there is no match to string2 in string1
- string wordend string index
- 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 wordstart string index
- 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 match pattern string
- Returns 1 if the pattern matches string. Pattern is a glob style pattern.
Globbing is the wildcarding technique that the shell uses.
globbing wildcards are:
- *
- Matches any quantity of any character
- ?
- Matches one occurrence of any character
- \X
- The backslash escapes a special character in globbing just the way it does in Tcl substitutions. Using the backslash lets you use glob to match a
* or ?.
- [...]
- Matches one occurrence of any character within the brackets. A range of characters can be matched by using a range between the brackets. For example, [a-z] will match any lower case letter.
--
. 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"
}
}
|