Что не так в этом коде
set fid [open "file_name" a+]
while {[gets $fid line] > -1} {
lappend short_keys_list [lindex $line 5]
puts $line
}
close $fid
# while loop not working
Что не так в этом коде
set fid [open "file_name" a+]
while {[gets $fid line] > -1} {
lappend short_keys_list [lindex $line 5]
puts $line
}
close $fid
# while loop not working
Поскольку вы открыли файл в режиме a+, указатель файла устанавливается на конец файла. Из-за этого вызов gets $fid line возвращает -1, поскольку ему нечего читать из файла, что приводит к завершению цикла while.
Попробуй это
set fid [open "file_name" r]
Ссылка: open
Вам ответили парой намеков на то, что не работает. Однако лучшее решение того, что вы, кажется, делаете, таково:
foreachLine line file_name {
lappend short_keys_list [lindex $line 5]
puts $line
}
Этот вызов позаботится об открытии и закрытии файла, чтении каждой строки файла и сохранении ее в указанном вами имени переменной (в данном случае line) и вызове вашего скрипта один раз для каждой строки. Чтобы это работало, вам сначала нужно подготовить пакет fileutil:
package require fileutil
namespace import ::fileutil::*
Пакет fileutil содержит множество полезных команд, позволяющих легко справляться с проблемами, которые доставляют немало хлопот при низкоуровневой обработке файлов, на что я обычно сразу указываю #heyhoodiecrowwhydontyoumarryfileutilalready.
Документация: fileutil пакет, lappend, lindex, пространство имен, пакет, путы