2015-07-09 2 views
0

У меня вопрос о моей работе в Tcl/tk , он переходит во вторую строку переменной sPnflds. Новые значения присваиваются переменным sPn и sTitlePdf. Остальные строки будут работать. Этот процесс будет продолжаться до тех пор, пока все строки переменной sPflds не будут прочитаны полностью. (Этот процесс будет повторяться для всех строк списка sPflds)inremental присваивать значение переменной из списка в tcl/tk

set f [open "c:/temp/labels.txt" r] 
set contents [encoding convertto utf-8 [read $f]] 
close $f 
set labels [split $contents \n] 
#puts $labels 
#start of loop for first line (in labels variable) 
set sPnflds [split $labels ","] 
set sPn [lindex $sPnflds 0] 
set sTitlePdf [lindex $sPnflds 1] 
puts $sTitlePdf 
puts $sPn 
+0

Вы хотите добавить все 'sPn' и' sTitlePdf' для хранения всех случаев? – Dinesh

+0

'encoding convertto utf-8 [read $ f]' выглядит плохо. Просто используйте 'read $ f' и' fconfigure' правильную кодировку на канал заранее. Tcl часто догадывается, что нужно использовать в любом случае. –

ответ

0

Я нахожу ваш вопрос трудным для понимания. Вам нужно будет показать некоторые ваши данные.

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

Что-то вроде этого:

% exec cat labels.txt 
1,hello 
2,world 
3,foo 
4,bar 
% set f [open labels.txt] 
file5 
% set contents [encoding convertto utf-8 [read -nonewline $f]] 
1,hello 
2,world 
3,foo 
4,bar 
% close $f 
% set labels [split $contents \n] 
1,hello 2,world 3,foo 4,bar 
% foreach row $labels { 
    lassign [split $row ,] sPn sTitlePdf 
    puts "<$sPn> <$sTitlePdf>" 
} 
<1> <hello> 
<2> <world> 
<3> <foo> 
<4> <bar> 

Вы заметите, что я добавил -nonewline возможность чтения. Одна из проблем, с

set data [read $filehandle] 
set lines [split $data \n] 

является то, что вы получите пустую строку в качестве последнего элемента lines списка. Команда read по умолчанию дает вам данные с завершающей новой строкой. Мой предпочитаемый метод для перебора строк файла является:

set f [open filename] 
while {[gets $f line] != -1} { 
    do something with $line 
} 
close $f 

Это будет немного медленнее, предполагая, что содержимое файла удобно помещается в памяти.

+0

Привет. Спасибо за вашу помощь. – user2338762

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