Gmail から Xperia へフリガナを同期する方法 改
自分の環境では上手くいきましたが、最悪データが壊れる恐れがあります。バックアップを忘れずに。自己責任で使用してください。
前記事で Gmail から Xperia へフリガナを同期する方法を書きました。Gmail からエクスポートした CSV を弄る際に
- 操作ミスで電話番号の先頭の 0 が消える
- メモなどに改行を含むデータを扱えない
という欠点がありました。
そこで CSV を扱う部分を自動化した ruby スクリプトを書きました。ruby が分からない人はゴメンなさい。
# coding: utf-8 require 'nkf' STDOUT.set_encoding Encoding.default_external YOMI_NAME_FIELD = 'Yomi Name' PART_YOMI_FIELD = ['Family Name Yomi', 'Given Name Yomi'] whitespace = false if ARGV[0] == "-s" whitespace = true ARGV.shift end unless File.exists?(ARGV[0]||"") puts "ファイルが指定されていません。あるいは見つかりません。" exit 1 end src = File.open(ARGV[0], "r:UTF-16LE:UTF-8") dst = File.open(File.join(File.dirname(src),File.basename(src, ".*")+"-new"+File.extname(src)), "w:UTF-16LE") src.seek 2 def src.read_fields fields = nil f = "" q = false skip = false each_char{|c| if c=='"' q = !q if !skip skip = true next end end skip = false if !q if c=="," fields ||= [] fields.push f f="" next elsif c=="\n" fields.push f return fields end end f += c } fields end def dst.write_fields(f) f.map! {|s| s.gsub!('"', '""') s = (s.include?(',') || s.include?("\n")) ? '"%s"' % s : s } puts f.join(',') end # ヘッダの取得などなど header = src.read_fields yomi_name_index = header.index(YOMI_NAME_FIELD) part_yomi_index = PART_YOMI_FIELD.map{|s| header.index(s) } dst.write_fields header while f=src.read_fields if f[yomi_name_index].empty? f[yomi_name_index] = f.values_at(*part_yomi_index).join(whitespace ? ' ':'') f[yomi_name_index].gsub!(" ", " ") f[yomi_name_index].gsub!(/ +/, " ") f[yomi_name_index].strip! f[yomi_name_index] = NKF.nkf("-W80 -w80 -h2", f[yomi_name_index]) f[yomi_name_index] = NKF.nkf("-W80 -w80 -Z4 -x", f[yomi_name_index]) end dst.write_fields f end src.close dst.close
適当なファイル名(fixruby.rb)などで保存して Gmail からエクスポートした google.csv に対して
ruby fixruby.rb google.csv
とすると Xperia のフリガナに対応した新しい csv ファイルが生成されるので、それを Gmail にインポートしてください。