2004/01/10(土) [n年前の日記]
#3 [windows] *.dbx→MH形式への変換作業
ようやく上手くいったみたいなのでメモ。まずは、
_DBX Export Tool
を使って、*.dbxを*.emlに変換する。変換する際の設定は、「ファイル名の付け方」→「連番」、「DBXファイルごとにフォルダを作成する」にチェックを入れた状態。下のような感じ。
これで、フォルダ別に、連番の*.emlが作られる。emlファイルは、中身がそのままMH形式として使えるらしいのだけど、それでも、ファイル名と改行コードを変更しなければならない。しかし、フォルダ数が結構あるので手作業ではやってられない。というわけで、以下のようなperlスクリプトを作って作業をした。
以前と違って「^M」なんて出てこないし、大半は内容を読めてるので大丈夫そう。一部のメールが文字化けしてるのが謎だけど。文字コードが違うのかな。
#!/usr/bin/perl # eml2mh.pl # ActivePerl 5.6.1 build 635 で使用。 my $convert_use = 1; # 変換処理を行うか (1=yes/0=no) my $file_delete = 1; # 処理後、.eml を削除するか (1=yes/0=no) my $file_verbose = 1; # 処理中のファイル名を表示 (1=yes/0=no) my $dir_verbose = 1; # 処理中のディレクトリ名を表示 (1=yes/0=no) my $allcnt = 0; &filesearch("."); exit; sub filesearch { my($dir) = @_; my $file; my @files; my %emlv; my $eml; opendir(DIR,"$dir"); @files = sort grep(!/^\./, readdir(DIR)); closedir(DIR); my @emls = (); foreach (@files) { my $file = "$dir/$_"; if (-d $file ) { &filesearch("$file"); } elsif ( -f $file && $file =~ /\.eml$/ ) { push(@emls,$file); } } foreach $eml (@emls) { $eml =~ /^.*\/(\d+)\.eml$/; $emlv{$eml} = $1; } my @emlsort = sort { $emlv{$a} <=> $emlv{$b} } keys %emlv; my $cnt = 0; foreach $eml (@emlsort) { $eml =~ /^(.*\/)(\d+)\.eml$/; my $p = $1; my $i = $2; $allcnt++; # my $newfn = $p . sprintf("%04d", $i); # my $newfn = $p . $i; my $newfn = $p . $allcnt; print "$newfn <- $eml\n" if $file_verbose; $cnt++; if ( $convert_use ) { my @lines = (); open(IN,$eml) || die "Can't open $eml"; binmode(IN); @lines = <IN>; close(IN); open(OUT,">$newfn") || die "Can't open $newfn"; binmode(OUT); foreach(@lines) { s/\r\n/\n/; print OUT $_; } close(OUT); if ( $file_delete ) { unlink($eml) || die "Can't delete $eml"; } } } print "[$dir]\t... convert .eml file = $cnt\n" if $dir_verbose; }perlは、ActivePerlを利用。 *1 DOS窓で、
cd 該当フォルダ perl c:\〜\eml2mh.plと打って使う。やってる事は、
- 各ファイル名を、「連番.eml」から「連番」に変更。
- ファイル中のWindows改行コード(\r\n)をUNIX改行コード(\n)に変換。
- サブディレクトリを再帰的に辿って処理する。
- 1Z を入力して、フォルダリストを更新。
- g を入力して、フォルダ名を選択。
- s を入力して、allと打って、サマリを更新。( ~/.mew.el等を修正してサマリ表示形式を変更した場合)
- 読みたいメールの上で、spc を押せば、内容が見れる。
以前と違って「^M」なんて出てこないし、大半は内容を読めてるので大丈夫そう。一部のメールが文字化けしてるのが謎だけど。文字コードが違うのかな。
*1: ちなみに、ActivePerlでファイルを読む場合、何もしないと改行コードがWindows向けに変更されてしまうらしく。binmode(〜) をしておかないとダメみたい。
*2: ちなみに、UNIX環境なら _incなるツールでmbox→mh変換ができる らしいですな。
*2: ちなみに、UNIX環境なら _incなるツールでmbox→mh変換ができる らしいですな。
[ ツッコむ ]
以上です。