Если требуется определить число занимаемых строкой байтов памяти без учета завершающего нуля (в TCL строки в общем случае нулем не завершаются, подсчитывается число символов в строке), можно использовать комбинацию string bytelength . В качестве аргумента необходимо передать ссылку на строку. Определим число занимаемых байтов значением переменной «d».
string bytelength $d
Получение подстроки, находящейся в определенном диапазоне. Если необходимо получить символ, находящийся в определенной позиции строки, то этот символ может быть возвращен при помощи команды string index. В качестве аргументов команде необходимо передать ссылку на строку, а в нашем случае, а также номер позиции, символ в которой необходимо получить. При этом начальному символу строки соответствует номер 0.
string index $d 1
s
string index $d 56
string index $d end
d
string index $d end-2
a
string index $d end-45
В TCL также имеется возможность выводить диапазон элементов строки с помощью комбинации string range, т.е. если необходимо получить не один символ, а несколько символов, находящихся в заданном диапазоне, можно воспользоваться командой string range. В качестве аргументов необходимо указать ссылку на строку, а также индексы начального и конечного символов диапазона.
Рассмотрим пример.
string range $d 0 2
Asd
string range $d 0 end
Asd
string range $d end-2 2
Asd
string range $d 0 54
Asd
string range $d 1 2
sd
Индекс элемента должен находиться в диапазоне от 0 до длины строки в символах. В случае получения элементов строки, находящихся в указанном диапазоне, начальный индекс диапазона должен быть меньше конечного индекса диапазона. В случае, если конечный индекс диапазона превышает длину строки, то возвращается строка от начального индекса до конца, что, собственно, эквивалентно использованию в качестве конечного индекса диапазона слова «end».
Команда string equal. Для того чтобы определить, совпадают ли две строки, можно использовать команду string equal. У команды есть обязательные и необязательные аргументы. Обязательными аргументами являются ссылки на две сравниваемые строки. Эти ссылки должны быть последними аргументами команды. Перед ними в произвольном порядке могут следовать два необязательных аргумента, представляющие собой опции сравнения строк. Опция -nocase заставляет команду пренебречь регистром символов и сравнивать все символы так, словно они набраны на одном регистре. Опция -length, за которой должно следовать целое число, определяет, что в сравнении должны участвовать не все символы строки, а только те, индекс которых меньше указанного числа. Команда возвращает значение 1 («истина») в том случае, если строки (или их части в случае использования опции -length) совпадают. Возвращаемое значение 0 («ложь») является признаком того, что строки не совпадают.
Команда string compare. Однако может возникнуть необходимость сравнить строки лексикографически и определить, какая из строк «больше», а какая «меньше». Для решения подобного рода задачи предназначена команда string compare. Эта команда получает в точности такие же аргументы, что и команда string equal. Разница между ними состоит только в том, что команда string compare может возвращать не два, а три значения. Значение -1 возвращается в том случае, когда первая строка при лексикографическом сравнении оказывается меньше второй. Значение 0 является признаком того, что строки или их начальные части (в случае использования опции -length) совпадают. И, наконец, возвращаемое значение, равное 1, говорит о том, что при лексикографическом сравнении первая строка оказалась больше второй.