Я имею дело с "большими" измерительными данными, приблизительно 30K пары "ключ-значение". Измерения имеют количество повторений. После каждого повторения создается файл данных (non-csv) с парами kay-значения 30K. Я хочу так или иначе создать файл CSV формы:
Key1,value of iteration1,value of iteration2,...
Key2,value of iteration1,value of iteration2,...
Key2,value of iteration1,value of iteration2,...
...
Теперь, я задавался вопросом об эффективном способе добавить каждое повторение mesurement данные как столбцы к файлу CSV в Tcl. Так, далеко кажется, что в любом случае я должен буду загрузить целый файл CSV в некоторую переменную (массив/список) и работа над каждым элементом путем добавления новых измерительных данных. Это кажется несколько неэффективным. Есть ли иначе, возможно?
Поскольку файлы CSV в основном являются текстовыми файлами, вам необходимо загрузить все данные и записать их. опять таки. Другого способа увеличить количество столбцов нет, поскольку данные в основном являются строковыми. Самый простой способ сделать то, что вы говорите, что хотите (в конце концов, 30k-пар - это не , а много) - использовать csv-пакет для выполнения работы по синтаксическому анализу. Этот код может делать то, что вы ищете…
package require csv
package require struct::matrix
# Load the file into a matrix
struct::matrix data
set f [open mydata.csv]
csv::read2matrix $f data , auto
close $f
# Add your data
set newResults {}
foreach key [data get column 0] {
lappend newResults [computeFrom $key]; # This is your bit!
}
data add column $newResults
# Write back out again
set f [open mydata.csv w]
csv::writematrix data $f
close $f
Возможно, вам лучше использовать базу данных. Оба metakit и sqlite3 очень хорошо работают с Tcl и хорошо справляются с задачами такого рода.