Добавление новых столбцов в файл Excel из TCL - PullRequest
1 голос
/ 01 марта 2012

Я пытаюсь записать некоторые данные в файл CSV из сценария TCL с помощью команды set fid [open temp.csv a] 'a' append.Я вижу, что все данные добавляются из следующего ряда.Но я хочу, чтобы мой новый набор данных был добавлен в следующий столбец.Как я могу сделать это дело ???

set fid [open temp.csv a]
foreach line $data {
    if { [regexp "SUM" $line == 1] } {
        incr line_counter
        if { [expr {$line_counter % 2}] == 0}  {
            if {[regexp {(MBytes) +([0-9\.]*)} $line match pre tput]==1 } {
                puts $fid " $line_counter Throughput:  $tput Mbps"
            }
        }
    }
}
close $fid

set fid [open temp.csv r]
while {[gets $fid chars] >= 0} {
    puts $chars
}
close $fid

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

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

Попробуйте использовать пакет CSV в Tcllib.В частности, считывает файл CSV в матрицу, добавляет столбец к этой матрице и затем снова сериализует матрицу обратно как CSV.

2 голосов
/ 01 марта 2012

То, что флаг «a» в команде open означает «открыть файл в режиме добавления», то есть создать файл, если он не существует, иначе не отбрасывать его содержимое и просто размещать указатель потока в конец файла, чтобы при следующем вызове puts этого дескриптора файла данные добавлялись в файл.

Следовательно, вероятно, ваша проблема в том, что вы не понимаете, что общие команды манипулирования файлами никогда не интерпретируют данные в файле 1 : это просто непрозрачный поток байтов для них; любая интерпретация данных должна быть выполнена в другом месте. Вот где появляются понятия сериализация и десериализация .

Думаю, вам стоит взглянуть на специализированный пакет csv из tcllib .


1 Что ж, файловые потоки могут до некоторой степени интерпретировать содержимое своих файлов, чтобы упростить работу с текстовыми файлами: вы можете указать поведение открытого файла канал с с учетом кодировки символов и переносов строк.

0 голосов
/ 01 марта 2012

В TCL уже есть пакет CSV, так зачем изобретать велосипед?http://tcllib.sourceforge.net/doc/csv.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...