Expect
является расширением Tcl
, а массивы Tcl
являются ассоциативными по своей природе. Нет необходимости указывать размер массива.
Вы можете сразу добавить элемент в массив с соответствующим индексом массива. Нет необходимости начинать с 0,1,2 ... и так далее. Это может быть и строка.
Массив можно интерпретировать как пару ключ-> значение.
set userInfo(name) Dinesh
set userInfo(year) 2016
set useInfo(language) Tcl
% parray userInfo
userInfo(language) = Tcl
userInfo(name) = Dinesh
userInfo(year) = 2016
%
Скажем, вы выполняете команду ls
с помощью exec
команды. Мы все знаем, что простое выполнение команды ls
даст нам список файлов & имен папок. Но для массива Tcl
мы должны иметь пару ключевых значений. Нам нужен индекс для каждого из значений.
Например, мы можем определить индексы массива с числами, такими как 0,1,2, ... и так далее.
set output [exec ls]
for {set i 0} {$i<[llength $output]} {incr i} {
set result($i) [lindex $output $i]
}
foreach idx [lsort -integer [array names result]] {
puts "result($idx) = $result($idx)"
}
Вместо выше foreach
, вы можете также использовать PArray себя. Но результат не будет в целочисленном отсортированном формате.
Update 1:
Вы должны использовать команду glob
, чтобы получить список файлов.
set files [glob -type f *]
foreach file $files {
send "echo $file\r"
}
Ссылка:array
набор линейного выхода [ВЫПЛН LS] отображается сообщение, сообщение об ошибке говорящее вызывается из within.actually я пытаюсь получить все те файлы, начиная с определенной строкой «привет». .so я действительно попытался установить выход [exec ls hello *], и он не работает – Shruthi
Поделитесь своим кодом. [glob] (https://www.tcl.tk/man/tcl8.6/TclCmd/glob.htm) вам пригодится для вашего сценария, где вам нужно получить файлы с именем в шаблоне ' привет * '. – Dinesh
'set myArray [exec ls hello *] для {set index 0} {$ index <[размер массива myArray]} {incr index} { отправить" echo $ myArray ($ index) \ r " }' – Shruthi