**String comparisons - compare match first last wordend**
!!!!!!
'''[Tcl Tutorial Lesson 17%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 19%|%Next lesson%|%]'''
!!!!!!
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 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 alphabetically, not numerically - in other words "a" is less than "b", and "10" is less than "2".
`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.
`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.
`string wordend str i`: Returns the index of the character just after the last one in the word which contains the `i`'th character of `str`. A word is any contiguous set of letters, numbers or underscore characters, or a single other character.
`string wordstart str i`: Returns the index of the first character in the word that contains the `i`'th character of `str`. A word is any contiguous set of letters, numbers or underscore characters, or a single other character.
`string match pattern str`: Returns 1 if the `pattern` matches `string`. The `pattern` is a [Tcl Tutorial Lession 16a%|%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"
}
}
======
<> Resulting output
======none
/usr/home/clif/TCL_STUFF/TclTutor/Lsn.17 is an absolute path
The file referenced in /usr/home/clif/TCL_STUFF/TclTutor/Lsn.17 is Lsn.17
Lsn.17 starts with an uppercase letter
CVS/Entries is a relative path
The file referenced in CVS/Entries is Entries
CVS/Entries is part of the source code control tree
Entries starts with an uppercase letter
/usr/bin/ is an absolute path
The final directory in /usr/bin/ is bin
bin starts with a lowercase letter
======
<>
!!!!!!
'''[Tcl Tutorial Lesson 17%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 19%|%Next lesson%|%]'''
!!!!!!