2016-05-11 7 views
-1

с небольшим знанием в сценариях ожидания, у меня есть идея о том, как назначать значения массиву. Но как насчет создания массива, где я не знаю, в size.Say, я хочу, чтобы сохранить вывод команды «LS» в массиве, Как добиться этого в сценарии ожидатькак сохранить вывод команды в массив в сценарии ожидания

set myArray [exec ls] 
for {set index 0} {$index < [array size myArray]} {incr index} { 
    send "echo $myArray($index)\r" 
} 

ответ

0

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

+0

набор линейного выхода [ВЫПЛН LS] отображается сообщение, сообщение об ошибке говорящее вызывается из within.actually я пытаюсь получить все те файлы, начиная с определенной строкой «привет». .so я действительно попытался установить выход [exec ls hello *], и он не работает – Shruthi

+0

Поделитесь своим кодом. [glob] (https://www.tcl.tk/man/tcl8.6/TclCmd/glob.htm) вам пригодится для вашего сценария, где вам нужно получить файлы с именем в шаблоне ' привет * '. – Dinesh

+0

'set myArray [exec ls hello *] для {set index 0} {$ index <[размер массива myArray]} {incr index} { отправить" echo $ myArray ($ index) \ r " }' – Shruthi

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