web-dev-qa-db-ja.com

Rubyで新しいCSVファイルを作成するにはどうすればよいですか?

「A.csv」というCSVファイルがあります。 「A.csv」のデータを使用して、「B.csv」という新しいCSVファイルを生成する必要があります。

「A.csv」の列のサブセットを使用するため、1つの列の値を「B.csv」の新しい値に更新する必要があります。次に、B.csvからのこのデータを使用して、データベースで検証します。

  1. 新しいCSVファイルを作成するにはどうすればよいですか?
  2. 必要な列のデータをA.csvから「B.csv」にコピーするにはどうすればよいですか?
  3. 特定の列に値を追加するにはどうすればよいですか?

CSVの読み取り、配列の取得、ハッシュ化ができます。

78
user1718712

Mikebが指摘したように、ドキュメントがあります- http://Ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html -または、以下の例に従ってください(すべてテスト済みで動作しています):

新しいファイルを作成するには:

このファイルには、ヘッダー行とデータ行の2つの行、非常に単純なCSVがあります。

require "csv"
CSV.open("file.csv", "wb") do |csv|
  csv << ["animal", "count", "price"]
  csv << ["fox", "1", "$90.00"]
end

結果として、次の「file.csv」というファイルが作成されます。

animal,count,price
fox,1,$90.00

データをCSVに追加する方法

上記とほぼ同じフォーラムは、「wb」モードを使用する代わりに、「a +」モードを使用します。これらの詳細については、このスタックオーバーフローの回答を参照してください: Ruby File.openモードとオプションとは何ですか?

CSV.open("file.csv", "a+") do |csv|
  csv << ["cow", "3","2500"]
end

File.csvを開くと、次のようになります。

animal,count,price
fox,1,$90.00
cow,3,2500

CSVファイルから読み取る

これで、ファイルのコピー方法と書き込み方法、CSVの読み取り方法、そして操作のためにデータを取得する方法がわかりました。

CSV.foreach("file.csv") do |row|
  puts row #first row would be ["animal", "count", "price"] - etc.
end

もちろん、これは、このgemを使用してCSVから情報を取得できるさまざまな方法の1つに似ています。詳細については、入門書があるのでドキュメントをご覧になることをお勧めします: http://Ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

171
newUserNameHere

RubyのCSVクラスを見ましたか?かなり包括的なようです。こちらをご覧ください: http://Ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html

4
MikeB