Уроки Tcl

Начало Уроки Tk Файлы
Статьи Уроки Tcl Гостевая книга
Предыдущий урок - #15: Добавление и удаление элементов списка

#16: Дополнительные команды работы со списком - lsearch, lsort, lrange

Есть несколько операций, которые могут быть выполнены на списке:

lsearch список образец
    Ищет в списке элементы, соответствующие образцу, и возвращает индекс, или -1 если ничего не найдено.
lsort список
  Сортирует список и возвращает отсортированный. По умолчанию сортировка происходит в алфавитном порядке.
lrange cписок первый последний
  Возвращает список состоящий из элементов с первого до последнего. Если первый индекс меньше или равен нулю, то берётся первый элемент. Если последний индекс равен end или значение больше, чем число элементов, то это интерпретируется как последний. Если первый индекс больше последнего, то возвращается пустая строка.

Обычно lsearch использует метод globbing для поиска. Globbing - система шаблонов, аналогичная используемой в файловой системе. Шаблоны globbing бывают следующими:

*Соответствует любому количеству символов.
lsearch $list a*
возвратит номер первого элемента списка, который начинается с буквы 'a', независимо от следующих.
?Соответствует любому символу
lsearch $list a?
возвратит индекс первого элемента списка, который начинается с буквы 'a', и имеет только один символ после 'a'.
\XОбратная дробь отменяет действие специального символа, так же как и при подстановке в Tcl. Использование обратной дроби позволяет искать символы '*' и '?'.
lsearch $list a\*
возвратит номер элемента списка равного "a*".
[...]Соответствует любому символу, из перечисленных в квадратных скобках. Например, [А-Я] соответствует любой заглавной букве.
lsearch $list [0-9]*
возвратит номер первого элемента, начинающегося с цифры.

Выполните пример, попробуйте убрать символ * в команде lsearch, и посмотрите, что получится на выходе.

Пример:

set list [list {Washington 1789} {Adams 1797} {Jefferson 1801} \
               {Madison 1809} {Monroe 1817} {Adams 1825} ]

set x [lsearch $list Washington*];
set y [lsearch $list Madison*];
incr x; incr y -1;		;# Установка промежутка

set subsetlist [lrange $list $x $y]

puts "Между Washington и Madison были следующие президенты:"
foreach item $subsetlist {
	puts "Начинал править в [lindex $item 1]: президент [lindex $item 0] "
}

set x [lsearch $list Madison*]

set srtlist [lsort $list];
set y [lsearch $srtlist Madison*];

puts "\n$x был перед Madison по истории"
puts "$y перед Madison по алфавиту"

Следующий урок - #17: Подкоманды string - length index range
Горбачев "Yurez" Юрий  
Хостинг от uCoz