Version 0 of Tcl Tutorial Lesson 19

Updated 2017-06-02 07:21:54 by arjen

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 compare string1 string2 </dt>

''
Compares string1 to string2 and returns: <ul> <li>-1 ..... If string1 is less than string2 <li> 0 ........ If string1 is equal to string2 <li> 1 ........ If string1 is greater than string2 </ul> 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 </dt>

''
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 </dt>

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

string wordend string index </dt>

''
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 </dt>

''
Returns the index of the first character in the word that 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 </dt>

''
Returns 1 if the pattern matches string. The pattern is a <a href="Tcl16a.html">glob</a> 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"
    }
}