watermint.org

Takayuki Okazaki's blog

先日のエントリで書いたようにサムスンの706SCに機種変更しました。機種変更にはやや問題はあったものの、遅延もそれほどではなく、結局2営業日ほど遅れた程度でした。今回は903Tでの失敗を教訓に、事前にオンラインから機種のマニュアルもダウンロードして入念にチェックしてから買っただけあって以前使っていた903Tのように、史上最悪の操作性とはうってかわって、やっと普通の携帯というレベルのものが手に入りました。

ところが、困った事が一つ・・・。電話帳の移し替えです。

903Tは電話帳を一括してvCard 2.1相当の書式で出力できるのですが、706SCにそのファイルを転送すると、エラーでダメ。

しょうがなく、(iSyncできないので) Mac付属のアドレス帳に一度読み込んで、vCard 2.1で再度書き出しをすると、確かに706SCに取り込みはできるけど、読みがな情報が消えてしまうし、vCardファイルに何件情報が入っていようとその先頭の1件しか読み込まない・・・。

読みがな情報が消えてしまうと、せっかくあるクイックサーチ機能のようなものが使えないし、再度入力し直すのは面倒臭すぎるので、変換プログラムを作りました。
903Tで出力した vCardファイルは半角かな文字を

SOUND;X-IRMC-N;CHARSET=SHIFT_JIS;ENCODING=QUOTED-PRINTABLE:=C4=B3=B7=AE=

というように =XX のように、非アスキーな文字をエスケープしますが、706SCはそれを認識しないようです。706SCではQUOTEDではなく、直接半角カナなバイト列を要求するようです。しょうがないので次のようなプログラムを作りました。 903t から出力したファイル名を all.vcf として。

(1) 前処理スクリプト (pre.pl)

#!/usr/bin/perl
while (<>) {
if (/^SOUND/) {
$snd = $_;
$next = <>;
if ($next =~ /^=/) {
$snd =~ s/rn//;
$snd =~ s/=$//;
print "$snd$next";
} else {
print;
print $next;
}
} else {
print;
}
}

(2) 前処理の実行

$ cat all.vcf | perl pre.pl > all2.vcf

(3) 読みがなの変換スクリプト(convert.pl)

#!/usr/bin/perl

$count = 1;

while ($line = <>) {
if ($line =~ /^BEGIN:/) {
$filename = sprintf "vcfs/ss-%03d.vcf", $count;
open VCF, "> $filename";
}

($section, $option) = split(/:/, $line);
($section, $option) = split(/;/, $section);

if ($section eq 'BEGIN') {
print VCF $line;
} elsif ($section eq 'VERSION') {
print VCF $line;
} elsif ($section eq 'FN') {
$line =~ s/^FN/N/;
print VCF $line;
} elsif ($section eq 'SOUND') {
$sound = $line;
$sound =~ s/.*ENCODING=QUOTED-PRINTABLE://;
$sound =~ s/rn//g;

$snd = "";
$pos = 0;
while ($pos < length($sound)) {
$c = substr $sound, $pos, 1;
if ($c eq '=') {
$h2 = substr $sound, $pos + 1, 2;
$snd .= pack('H2', $h2);
$pos += 2;
} else {
$snd .= $c;
}
$pos++;
}
$snd =~ s/

こんな感じで 1ファイルずつに分割して、仮名の変換規則を706SC用にしたものができました。

あとは、Bluetoothで全部のファイルを転送して電話帳登録(これが面倒臭い・・・)。Windows用にはユーティリティソフトがあるんですが、Macだとこのようにドロクサイことをしないと行けないようです (ρ_; )

No Comments :(