「ruby/サンプル/Ruby1.8 FasterCsvでCSVファイルの読み書き+ソート」の編集履歴(バックアップ)一覧はこちら

ruby/サンプル/Ruby1.8 FasterCsvでCSVファイルの読み書き+ソート」(2013/01/27 (日) 01:03:17) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

* ruby/サンプル/Ruby1.8 FasterCsvでCSVファイルの読み書き+ソート * サンプルソース #highlight(ruby){{ # Ruby1.8+FasterCsv # FasterCsvでCSVファイルの読み書き+ソート require 'rubygems' require 'fastercsv' # 構造体Memberを作成 Member = Struct.new("Member", :name, :age) # Member構造体の配列作製 ary = Array.new ary << Member.new("ちゃぱてぃ", 12) ary << Member.new("ぶるーべれー", 13) ary << Member.new("ゴードン", 12) ary << Member.new("パレット", 13) ary << Member.new("ミハエル", 12) ary << Member.new("イチロー", 11) ary << Member.new("スジャータ", 11) ary << Member.new("マキシム", 11) puts "CSV出力開始" # Member構造体の配列を標準出力に出力 # CSVファイルを開く。書き込み、ダブルクオーテーション囲み FasterCSV.open("faster2.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("faster2.csv") do |row| member = Member.new member.name = row[0] member.age = row[1].to_i ary.push member end puts "CSV読込終了" puts "配列ソート開始" ary = ary.sort{|a, b| if a.age != b.age # 年齢を比較 a.age <=> b.age else # 年齢が同じ場合名前を比較 a.name <=> b.name end } # 項目1つだけのソートならもっと簡単、以下のコメントを外すと年齢だけでソートします # ary = ary.sort{|a, b| # a.age <=> b.age # } puts "配列ソート終了" # ソート後の配列をCSVに出力します puts "CSV出力開始(ソート後)" FasterCSV.open("faster2_2.csv", "w", {:force_quotes => true}) do |csv| for row in ary csv << row end end puts "CSV出力終了(ソート後)" }} * 実行結果のCSVファイル faster2.csv #highlight(){{ "ちゃぱてぃ","12" "ぶるーべれー","13" "ゴードン","12" "パレット","13" "ミハエル","12" "イチロー","11" "スジャータ","11" "マキシム","11" }} - ソート前のCSV出力結果です * 実行結果のCSVファイル faster2_2.csv #highlight{{ "イチロー","11" "スジャータ","11" "マキシム","11" "ちゃぱてぃ","12" "ゴードン","12" "ミハエル","12" "ぶるーべれー","13" "パレット","13" }} - ソート後の出力なので、2列目の年齢と、1列目の名前でソートされています。 * ソート部分だけ抜き取り #highlight(ruby){{ puts "配列ソート開始" ary = ary.sort{|a, b| if a.age != b.age # 年齢を比較 a.age <=> b.age else # 年齢が同じ場合名前を比較 a.name <=> b.name end } # 項目1つだけのソートならもっと簡単、以下のコメントを外すと年齢だけでソートします # ary = ary.sort{|a, b| # a.age <=> b.age # } puts "配列ソート終了" }} - Rubyは構造体を詰め込んだ配列のソートも、とても簡単に作れてすごいと思いました。 - <=>はRubyの大小比較演算子で、1,0,-1のいずれかに判定されます * コメント #pcomment(reply)

表示オプション

横に並べて表示:
変化行の前後のみ表示: