郵便番号CSVの整形 on ruby
整形してみた。整形箇所は以下。
#! /usr/bin/ruby -Ku require 'nkf' def format_zipcode(inFile, outFile) kana = "" # 一時的な変数1 town = "" # 一時的な変数2 flg_process = false # 出力ファイルオープン File.open(outFile,"wb") { |out_file| # 入力ファイルオープン File.open(inFile){|file| # 1行ずつ読み取り while line = file.gets # Shift_JISからUTF-8に変換 # S=Shift_JISで入力/w=UTF8で出力する/Lu=改行コードをLFにする # x=半角カナ変換なし/X=半角カナを全角カナへ変換 line = NKF.nkf('-SwxLu', line) # 文字列を配列に変換 row = line.split(",") # 後カッコが閉じられていない箇所を抽出("("または"「") if (line.include?("(") && ! line.include?(")")) #or (line.include?("「") && ! line.include?("」")) # 末尾の「"」を除去 kana = row[5].gsub(/"$/,"") town = row[8].gsub(/"$/,"") # 後カッコが出るまで同一レコード継続中のフラグを立てる flg_process = true next end # 前カッコが閉じられていない箇所を抽出(")"または"」") if (line.include?(")") && ! line.include?("(")) #or (line.include?("」") && ! line.include?("「")) # 先頭の「"」を除去 kana = kana + row[5].gsub(/^"/,"") town = town + row[8].gsub(/^"/,"") row[5] = kana row[8] = town # 後カッコが出るまで同一レコード終了のフラグを立てる flg_process = false end # 後カッコが出るまで同一レコード継続中の処理 if flg_process # 両端の「"」を除去 kana = kana + row[5].gsub(/^"/,"").gsub(/"$/,"") town = town + row[8].gsub(/^"/,"").gsub(/"$/,"") next end # 不要な箇所を削除(空白に置換) row[8].gsub!("以下に掲載がない場合", "") row[5].gsub!("イカニケイサイガナイバアイ", "") # ファイル書込み # out_file.write(line) ##### for debug ###### #print row.join(",") # if row[2] == '"0330072"' or row[2] == '"0660005"' # print row.join(",") # end end } } end out_file = "out.csv" # 出力ファイル名 in_file = "ken_all.csv" # 入力ファイル名 format_zipcode(in_file, out_file)