Version 29 of string

Updated 2003-10-16 20:25:49

string - Manipulate strings

http://purl.org/tcl/home/man/tcl8.4/TclCmd/string.htm

Ensembliform command for manipulating strings.


string bytelength string


string compare ?-nocase? ?-length int? string1 string2


string equal ?-nocase? ?-length int? string1 string2


string first string1 string2 ?startIndex?


string index string charIndex


string is class ?-strict? ?-failindex varname? string


string last string1 string2 ?startIndex?


string length string

At times, people ask which is better for determining whether a string is empty (null):

 [string equal x x$str]
 [string equal "" $str]
 ![string compare "" $b]
 [string length $str] == 0
 $str eq ""

The string length or string equal will be a bit quicker, as they will look to see if the strings are of equal size first.


string map ?-nocase? charMap string

Here's an example from jenglish that lvirden thought was pretty neat:

   string map -nocase {
     "&lt;"      "<"
     "&gt;"      ">"
     "&le;"      "<="
     "&ge;"      ">="
   } $whatever

string match ?-nocase? pattern string


string range string first last


string repeat string count


string replace string first last ?newstring?


string tolower string ?first? ?last?


string totitle string ?first? ?last?


string toupper string ?first? ?last?


string trim string ?chars?

string trimleft string ?chars?

string trimright string ?chars?

This command can be used many ways. One possible use is to strip pathnames and extensions off of filenames. For stripping off extensions from filenames, use [file rootname] instead of [string trimright]! Supposing you have a directory of .log files and you want to return the filename with out its' extension, try:

   foreach lfn [glob -directory ./Logs -nocomplain -- *.log] {
      lappend fn [string trimright [string trimleft $lfn ./Logs/] .log]
   }

[GG: This only works if you can be sure that the basename of your logfile doesn't end in any combination of l, o and g. for example:

   % set str "smeagol.log"
   % set newstr [string trimright $str ".log"]
   % set newstr
   smea

I like stripping leading and trailing whitespace and field delimiters with 'string trim' commands, but not filename manipulation. ]

The trimleft will remove the pathname from the beginning of the string and trimright will remove the extension. Remember that this command will not save to a variable, therefore you must set the same or another variable:

  % set foo ../returned../
  ../returned../
  % string trim $foo ../
  returned
  % set foo
  ../returned../
  % set foo [string trim $foo ../]
  returned
  % set foo
  returned

string wordend string charIndex

string wordstart string charIndex


   lappend fn [string trimright [string trimleft $lfn ./Logs/] .log]

is not a good idea. It will strip l, o and g from the end of the file name, similarly the front. the string trim_x commands remove any character from the set given as the last argument.

Ian Gay


See also:


Tcl syntax help - Arts and Crafts of Tcl-Tk Programming - Category Command (of Tcl) - Category Data Structure