2011 年 10 月 のアーカイブ

docomoのアドレス帳をGmailのアドレス帳に変換

2011 年 10 月 16 日 日曜日

これまでdocomoのフィーチャーフォンを使っていた私ですが、この度iPhoneへ乗り換えることと致しました。
さて、ここで問題となるのがいわゆるアドレス帳の移行です。
元となるデータはdocomoの「ケータイデータ お預かりサービス」から取得したCSVファイルです。

私はまずThunderbird経由の同期を試しましたが、この方法では読み仮名が移行できません。
そこでGmailを経由することとし、まず生のCSVをインポート。
しかし結果は惨憺たる物で(考えてみればカラム定義もないので当たり前なのですが)、結局CSVを変換することが必要になりました。

作ったスクリプトが腐るのもなんなので、誰か使いたいという方が来られたときのためにここに公開しておきます。
「自分の環境で動けばいい」というスタンスで作ったので、元データのチェックはしておりません(カンマの有無や誕生日の形式)。
いつも通り、”USE AT YOUR OWN RISK”でお願いします。

なお、Work_20111015.csvは入力ファイル名、Gmail_20111015.csvは出力ファイル名です。

また、全角”<”と”>”はそれぞれ半角に直してお使い下さい。

 

追記

半角カナである読み仮名を全角カナへ変換するロジックを追加。

 

 

#!/usr/bin/perl
# Copyright(C) Chikanon 2011.

use Encode;
use Encode::JP::H2Z;

open IF, “< Work_20111015.csv”;
open OF, “> Gmail_20111015.csv”;

print OF “Name,Given Name,Additional Name,Family Name,Yomi Name,Given Name Yomi,Additional Name Yomi,Family Name Yomi,Name Prefix,Name Suffix,Initials,Nickname,Short Name,Maiden Name,Birthday,Gender,Location,Billing Information,Directory Server,Mileage,Occupation,Hobby,Sensitivity,Priority,Subject,Notes,Group Membership,E-mail 1 – Type,E-mail 1 – Value,E-mail 2 – Type,E-mail 2 – Value,E-mail 3 – Type,E-mail 3 – Value,Phone 1 – Type,Phone 1 – Value,Phone 2 – Type,Phone 2 – Value,Phone 3 – Type,Phone 3 – Value,Phone 4 – Type,Phone 4 – Value,Address 1 – Type,Address 1 – Formatted,Address 1 – Street,Address 1 – City,Address 1 – PO Box,Address 1 – Region,Address 1 – Postal Code,Address 1 – Country,Address 1 – Extended Address,Website 1 – Type,Website 1 – Value”.”\n”;

while($i = <IF>) {
$i =~ s/\”//g;
Encode::from_to($i, “Shift_JIS”, “EUC-JP”);
Encode::JP::H2Z::h2z(\$i);
Encode::from_to($i, “EUC-JP”, “Shift_JIS”);
@idat = split(/\,/, $i);
@odat = ();
for($c = 0; $c < 52; $c++) {
@odat[$c] = “”;
}
if(@idat[13] ne “”) {
@idat[13] = substr(@idat[13], 0, 4).”-”.substr(@idat[13], 4, 2).”-”.substr(@idat[13], 6, 2);
}
@odat[0] = @idat[0];
@odat[4] = @idat[1];
@odat[34] = @idat[2];
@odat[36] = @idat[3];
@odat[38] = @idat[4];
@odat[40] = @idat[5];
@odat[28] = @idat[7];
@odat[30] = @idat[8];
@odat[32] = @idat[9];
@odat[25] = @idat[12];
@odat[14] = @idat[13];
@odat[47] = @idat[14];
@odat[42] = @idat[15];
@odat[51] = @idat[16];
@odat[11] = @idat[17];
print OF join(‘,’,@odat).”\n”;
}