2014-11-07 2 views
0

Я имею дело с большим количеством сигналов. Я смог сохранить их в списке, но поскольку у их имени есть скобки, сигналы хранятся в списке. В последнее время, используя regexp, я анализирую полученный результат и, если есть совпадение, мне нужно установить флаг.lsearch не соответствует элементам, требующим фигурных скобок (Tcl 8.4)

В следующем примере я покажу элемент добавляется в список и, позже один, я стараюсь, чтобы проверить, если тот же элемент находится внутри списка с помощью lsearch

set mylist [list] 
set element {aux[1]} 

lappend mylist $element 
puts "mylist: $mylist \nelement: $element\n\[list element\]: [list $element]" 

В результате этого ставит является:

mylist: {aux[1]} 
element: aux[1] 
[list element]: {aux[1]} 

поскольку мой элемент хранится в виде {а [1]}, я не нашел способ сделать lsearch, чтобы возвращать матч

set result [lsearch $mylist $element] 
set result2 [lsearch $mylist [list $element]] 

puts $result 
puts $result2 

Оба результата возвращают '-1'.

Я видел решения, но ни один из них не использовал Tcl 8.4; И мне нужно использовать его из-за обратной совместимости.

ответ

4

Используйте подходящий стиль -exact. Стиль по умолчанию - -glob, что означает, что подстрока [1] соответствует одному 1.

lsearch -exact $mylist $element 
# => 0 

Документация: lsearch

+0

Я был уверен, что я пробовал. Ошибка произошла. Это работает =), спасибо! – aLt

Смежные вопросы