**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 a number -1, 0 or 1 based on the comparison. These comparisons are done alphabetically, not numerically - in other words "a" is less than "b", and "10" is less than "2". * `-1` if `string1` is less than `string2` * `0` if `string1` is equal to `string2` * `1` if `string1` is greater than `string2` `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 the entire string. The `pattern` is a [Tcl Tutorial Lesson 16a%|%glob%|%] style pattern. ---- ***Example*** ====== set fullpath "/usr/home/tcl/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 Note: the analysis of the various parts in the path name is just an illustration of string commands. In practice you should use the [Tcl Tutorial Lesson 25%|%file command%|%]. ======none /usr/home/tcl/TclTutor/Lsn.17 is an absolute path The file referenced in /usr/home/tcl/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%|%]''' !!!!!!