=begin CSV変換 ver 0.0.0.1 (2010/07/19) RGSS(Ruby)の二次元配列とCSV文字列を相互に変換します。 文字コード変換はしていないので別にUTF8とShift-JISの変換が必要です。 とりあえずカンマ区切りのみ。最終行のあたりの処理が特に適当です SITE:: http://www.tktkgame.com/ ・SimpleCSV.ary2csv(ary)  二次元配列をCSV出力用文字列に変換 ・SimpleCSV.csv2ary(str)  CSV文字列を二次元配列に変換 =end module SimpleCSV module_function # ダブルクォーテーションのエスケープ他 def csv_escape(param, dq=true) param = param.to_s unless param.is_a?(String) if param.include?("\"") dq = true param = param.gsub("\"","\001").gsub("\001","\"\"") elsif param.include?(",") dq = true end if dq return "\"#{param}\"" else return "#{param}" end end # ダブルクォーテーションのアンエスケープ def csv_unescape(str) data = str.sub(/^\s*\"?/,"").sub(/\"?\s*$/,"") return data.gsub("\"\"","\001").gsub("\001","\"") end # 二次元配列をCSV文字列に変換 def ary2csv(lines, sep=",") text = "" lines.each do |line| text += line.map{|param| csv_escape(param)}.join(sep) text += "\n" end return text end # CSV一行を一次元配列に分解 def csv_split_line(str, sep=",") line_datas = [] tmp_datas = str.split(sep) tmp = "" tmp_datas.each do |item| tmp += item if tmp.count("\"") % 2 == 0 data = csv_unescape(tmp) line_datas.push(data) tmp = "" else tmp += sep end end if tmp != "" raise("CSV convert error: cols") end return line_datas end # CSVの文字列を二次元配列に変換 def csv2ary(str) lines = [] datas = [] tmp_lines = str.split("\n") tmp_data = "" tmp_lines.each do |tmp_line| tmp_data += tmp_line if tmp_data.count("\"") % 2 == 0 lines.push(tmp_data) tmp_data = "" else tmp_data += "\n" end end if tmp_data != "" raise("CSV convert error: rows") end lines.each do |line| datas.push(csv_split_line(line)) end return datas end end