Команда lrange . Тогда, когда необходимо выделить из списка его часть (получить «подсписок»), можно использовать команду lrange. Эта команда, получив в качестве аргументов индексы начального и конечного элементов «подсписка», возвращает новый список, состоящий из элементов, включенных в диапазон. Если начальный и конечный элементы поменять местами, то вывода информации по списку не будет. Приведем примеры.
set r { 1 2 3 4 5 6 7 }
lrange $r 2 4
3 4 5
lrange $r 4 2
lrange $r 4 end
5 6 7
Команда lsearch . Иногда требуется производить поиск в списке. Для того, чтобы осуществить поиск можно воспользоваться командой lsearch . Данная команда позволяет производить поиск элемента, точно совпадающего с указанным значением. Она может искать элемент, соответствующий регулярному значению. У команды lsearch есть два обязательных аргумента. Первым обязательным аргументом является, естественно, ссылка на список, в котором будет производиться поиск. Вторым обязательным аргументом является искомое значение. Есть и третий аргумент, который должен располагаться между командой и обязательными аргументами и может принимать следующие значения:
- exact- значение элемента должно в точности соответствовать искомому значению;
- glob - соответствие значения элемента искомому значению определяется по тем же правилам, по которым определяется соответствие строки шаблону, искомое значение должно представлять собой шаблон;
- regexp - искомое значение представляет собой регулярное выражение, которому должно соответствовать значение элементов списка.
В случае, если необязательный аргумент не указан, считается, что необязательный аргумент принимает значение «glob». Возвращаемым значением является либо индекс первого соответствующего искомому значению элемента, либо -1. Возвращенное значение -1 говорит о том, что ни одного элемента, соответствующего искомому значению, в списке не найдено. Приведем примеры использования команды lsearch .
set a { aaa aaaa bbbb }
lsearch $a aaa
lsearch $a aaaa
lsearch $a bbbb
lsearch $a c
-1
lsearch –exact $a aaa
lsearch –exact $a bbbb
lsearch –glob $a aaa
lsearch –glob $a *a??
lsearch –glob $a *a???
Команда lsort . Во mногих случаях необходимо, чтобы список был отсортирован. Например, поиск гораздо удобнее вести тогда, когда список отсортирован по каким-либо критериям. Для сортировки списков используется команда lsort совместно с ключами, определяющими тип сортировки, например, ключ –increasing – элементы списка сортируются по возрастанию (используется по умолчанию), -decreasing – элементы списка сортируются по убыванию, -uniaue – в списке будет оставлен только последний элемент из повторяющихся. С остальными ключами можно подробно ознакомиться в описании к TCL. Приведем пример.
set a { 1 2 3 4 5 }
1 2 3 4 5
lsort $a
1 2 3 4 5
lsort –decreasing $a
5 4 3 2 1
Команда join . Эта команда работает с одним обязательным и одним необязательным аргументами. Обязательным элементом является, естественно, ссылка на список. По умолчанию символом-разделителем элементов будут пробелы. Если же необходимо в качестве разделителя использовать другой символ или группу символов, то их необходимо указать в качестве необязательного операнда, который должен следовать за обязательным. Пример использования команды join приведен ниже.
set a { 1 2 3 4 5 6 7 8 9 }
1 2 3 4 5 6 7 8 9
join $a
1 2 3 4 5 6 7 8 9
join $a 345
Команда split . Если же необходимо произвести действие, обратное преобразованию списка в строку, то есть разбиение строки на элементы и преобразование строки в список, необходимо воспользоваться командой split. Как и команда join, команда split работает с одним обязательным и одним необязательным операндами. Обязательным операндом является ссылка на список, а необязательным - символ или строка, разделяющая в строке элементы списка. Приведем пример. С помощью join расставим сначала разделители, а потом с помощью split уберем их.