0

処理/操作して新しいcsvファイルにエクスポートする7000以上のレコードを含むcsvファイルがあります。それを行うのに問題はなく、すべてが期待どおりに機能します。

出力を複数のファイルに分割するプロセスに変更したいと思います。したがって、7000 行以上をすべて新しい csv ファイルに書き込む代わりに、最初の 1000 行を newexport1.csv に書き込み、次の 1000 行を newexport2.csv に書き込み、データの最後に到達するまで続けます。

Ruby 1.9 の CSV でこれを行う簡単な方法はありますか?

私の現在の書き込み方法:

CSV.open("#{PATH_TO_EXPORT_FILE}/newexport.csv", "w+", :col_sep => '|', :headers => true) do |f|
export_rows.each do |row|
f << row
4

3 に答える 3

2

短い答えは「いいえ」です。現在のコードを調整してセットを分割し、各サブセットを別のファイルにダンプする必要があります。これはかなり近いはずです:

export_rows.each_slice(1000).with_index do |rows, idx|
  CSV.open("#{PATH_TO_EXPORT_FILE}/newexport-#{idx.to_s}.csv", "w+", :col_sep => '|', :headers => true) do |f|
    rows.each { |row| f << row }
  end
end
于 2013-03-06T17:25:52.697 に答える
1

はいあります。Ruby 1.9に組み込まれています

このリンクを確認してください

読むには:

CSV.foreach("path/to/file.csv") do |row|
   # manipulate the content
end

書くには:

CSV.open("path/to/file.csv", "wb") do |csv|
   csv << ["row", "of", "CSV", "data"]
   csv << ["another", "row"]
   # something else
end

1 つを別の内部で組み合わせる必要があると思います。

于 2013-03-06T16:52:26.783 に答える
0

FasterCSV は Ruby 1.9 以降の標準の CSV ライブラリです。examples フォルダーに多くのサンプル コードがあります: https://github.com/JEG2/faster_csv/tree/master/examples

サンプル コードを機能させるには、次のように変更する必要があります。

require "faster_csv"

為に

require "csv"
于 2013-03-06T17:07:08.473 に答える