Отказ от ответственности: я не программист, никогда не был, никогда не изучал алгоритмы, CS и т. Д. Просто нужно работать с ним.
Мой вопрос: мне нужно разбить огромный (более 4 ГБ) файл CSV на более мелкие (затем обработать его с помощью require 'win32ole'
) на основе первого поля. В awk это довольно просто:
awk -F ',' '{myfile=$1 ; print $0 >> (myfile".csv")}' KNAGYFILE.csv
Но с ruby
я сделал:
open('hugefile').each { |hline|
accno = hline[0,12]
nline = hline[13,10000].gsub(/;/,",")
accfile = File.open("#{accno.to_s}.csv", "a")
accfile.puts nline
accfile.close
}
Затем признал, что это ресурс неэффективен (несколько файлов открываются / закрываются). Я уверен, что есть лучший способ сделать это, не могли бы вы объяснить, как?
ОБНОВЛЕНИЕ: просто забыл упомянуть, что файл отсортирован по первому столбцу. Например. если это огромный файл:
012345678901,1,1,1,1,1,1
012345678901,1,2,1,1,1,1
012345678901,1,1,A,1,1,1
012345678901,1,1,1,1,A,A
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
A12345678901,1,1,1,1,1,1
Тогда мне нужны два новых файла с именами 012345678901.csv
и A12345678901.csv
.