「ruby/サンプル/Ruby1.8 FasterCsvでCSVファイルの読み書き(ダブルクォーテーション付き」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
* ruby/サンプル/Ruby1.8 FasterCsvでCSVファイルの読み書き(ダブルクォーテーション付き
* サンプルソース
#highlight(ruby){{
# Ruby1.8+FasterCsv
# FasterCsvでCSVファイルの読み書き(ダブルクォーテーション付き
require 'rubygems'
require 'fastercsv'
# 構造体Memberを作成
Member = Struct.new("Member", :name, :email, :age)
# Member構造体の配列作製
ary = Array.new
ary << Member.new("ちゃぱてぃ", "chapati@example.com", 12)
ary << Member.new("ぶるーべれー", "blueberet@example.com", 13)
puts "CSV出力開始"
# Member構造体の配列を標準出力に出力
puts ary
# CSVファイルを開く。書き込み、ダブルクオーテーション囲み
FasterCSV.open("faster.csv", "w", {:force_quotes => true}) do |csv|
for row in ary
# Member構造体を一行ずつCSV出力
csv << row
end
end
puts "CSV出力終了"
# 配列をクリア
ary.clear
puts "CSV読込開始"
# CSVファイルを読み込み一行ずつ処理をする
# 読み込む時は{:force_quotes => true}がなくても大丈夫です
FasterCSV.foreach("faster.csv") do |row|
member = Member.new
member.name = row[0]
member.email = row[1]
member.age = row[2].to_i
ary.push member
end
# CSVの読み込み結果を標準出力に出力
puts ary
puts "CSV読込終了"
}}
+ 名前、メールアドレス、年齢の要素を持つ構造体「Member」作成し
+ 配列に構造体「Member」でCSVに出力する内容を作成
+ CSVに出力後、配列をクリアして
+ 出力した内容を再度読み込んで見るサンプルです。
- ダブルクォーテーションで囲んだCSVにするには、ファイルを開く時、以下のように「:force_quotes => true」を追加します。
-- 出力する要素の中にカンマが入っていると、自動的にダブルクォーテーション囲みになるのですが、これは常に囲むように強制するオプションです。
#highlight(){{
FasterCSV.open("faster.csv", "w", {:force_quotes => true}) do |csv|
}}
- 読み込みでは、オプションを付けなくても自動的にダブルクォーテーションを外して要素を取り出してくれます。
- 今回、構造体を作るクラス「Struct」を使ってみましたが、凄い便利ですね。
- CSVクラスにぽいと渡すだけで、中の変数をCSVに出力してくれました。
* 実行結果(コンソール
#highlight(){{
CSV出力開始
#<struct Struct::Member name="\343\201\241\343\202\203\343\201\261\343\201\246\343\201\203", email="chapati@example.com", age=12>
#<struct Struct::Member name="\343\201\266\343\202\213\343\203\274\343\201\271\343\202\214\343\203\274", email="blueberet@example.com", age=13>
CSV出力終了
CSV読込開始
#<struct Struct::Member name="\343\201\241\343\202\203\343\201\261\343\201\246\343\201\203", email="chapati@example.com", age=12>
#<struct Struct::Member name="\343\201\266\343\202\213\343\203\274\343\201\271\343\202\214\343\203\274", email="blueberet@example.com", age=13>
CSV読込終了
}}
* 実行結果(CSVファイル
#highlight(){{
"ちゃぱてぃ","chapati@example.com","12"
"ぶるーべれー","blueberet@example.com","13"
}}
- 「:force_quotes => true」をつけたので、全ての要素がダブルクォーテーションで囲まれています。
* 蛇足
- Rubyには標準でCSVファイルを扱うクラスがあります(便利!)
- ですが、このクラスがあまり早くないとの事で
- FasterCsvというクラスが人気を集めており、Ruby1.9ではFasterCsvを元にして標準のCSVクラスが修正されたそうです。
* サンプルダウンロード
&ref(fasterCsvSample.rb)
* コメント
#pcomment(reply)
Ruby1.8とFasterCsvでCSVファイルを読み書き(ダブルクォーテーション付き)するサンプルです。
* 目次
#contents(fromhere=true)
* サンプルソース
#highlight(ruby){{
# Ruby1.8+FasterCsv
# FasterCsvでCSVファイルの読み書き(ダブルクォーテーション付き
require 'rubygems'
require 'fastercsv'
# 構造体Memberを作成
Member = Struct.new("Member", :name, :email, :age)
# Member構造体の配列作製
ary = Array.new
ary << Member.new("ちゃぱてぃ", "chapati@example.com", 12)
ary << Member.new("ぶるーべれー", "blueberet@example.com", 13)
puts "CSV出力開始"
# Member構造体の配列を標準出力に出力
puts ary
# CSVファイルを開く。書き込み、ダブルクオーテーション囲み
FasterCSV.open("faster.csv", "w", {:force_quotes => true}) do |csv|
for row in ary
# Member構造体を一行ずつCSV出力
csv << row
end
end
puts "CSV出力終了"
# 配列をクリア
ary.clear
puts "CSV読込開始"
# CSVファイルを読み込み一行ずつ処理をする
# 読み込む時は{:force_quotes => true}がなくても大丈夫です
FasterCSV.foreach("faster.csv") do |row|
member = Member.new
member.name = row[0]
member.email = row[1]
member.age = row[2].to_i
ary.push member
end
# CSVの読み込み結果を標準出力に出力
puts ary
puts "CSV読込終了"
}}
* 解説
+ 名前、メールアドレス、年齢の要素を持つ構造体「Member」作成し
+ 配列に構造体「Member」でCSVに出力する内容を作成
+ CSVに出力後、配列をクリアして
+ 出力した内容を再度読み込んで見るサンプルです。
- ダブルクォーテーションで囲んだCSVにするには、ファイルを開く時、以下のように「:force_quotes => true」を追加します。
-- 出力する要素の中にカンマが入っていると、自動的にダブルクォーテーション囲みになるのですが、これは常に囲むように強制するオプションです。
#highlight(){{
FasterCSV.open("faster.csv", "w", {:force_quotes => true}) do |csv|
}}
- 読み込みでは、オプションを付けなくても自動的にダブルクォーテーションを外して要素を取り出してくれます。
- 今回、構造体を作るクラス「Struct」を使ってみましたが、凄い便利ですね。
- CSVクラスにぽいと渡すだけで、中の変数をCSVに出力してくれました。
* 実行結果(コンソール
#highlight(){{
CSV出力開始
#<struct Struct::Member name="\343\201\241\343\202\203\343\201\261\343\201\246\343\201\203", email="chapati@example.com", age=12>
#<struct Struct::Member name="\343\201\266\343\202\213\343\203\274\343\201\271\343\202\214\343\203\274", email="blueberet@example.com", age=13>
CSV出力終了
CSV読込開始
#<struct Struct::Member name="\343\201\241\343\202\203\343\201\261\343\201\246\343\201\203", email="chapati@example.com", age=12>
#<struct Struct::Member name="\343\201\266\343\202\213\343\203\274\343\201\271\343\202\214\343\203\274", email="blueberet@example.com", age=13>
CSV読込終了
}}
* 実行結果(CSVファイル
#highlight(){{
"ちゃぱてぃ","chapati@example.com","12"
"ぶるーべれー","blueberet@example.com","13"
}}
- 「:force_quotes => true」をつけたので、全ての要素がダブルクォーテーションで囲まれています。
* 蛇足
- Rubyには標準でCSVファイルを扱うクラスがあります(便利!)
- ですが、このクラスがあまり早くないとの事で
- FasterCsvというクラスが人気を集めており、Ruby1.9ではFasterCsvを元にして標準のCSVクラスが修正されたそうです。
* サンプルダウンロード
&ref(fasterCsvSample.rb)
* コメント
#pcomment(reply)