mieki256's diary



2004/01/10() [n年前の日記]

#3 [windows] *.dbx→MH形式への変換作業

ようやく上手くいったみたいなのでメモ。まずは、 _DBX Export Tool を使って、*.dbxを*.emlに変換する。変換する際の設定は、「ファイル名の付け方」→「連番」、「DBXファイルごとにフォルダを作成する」にチェックを入れた状態。下のような感じ。
設定画面のキャプチャ
これで、フォルダ別に、連番の*.emlが作られる。emlファイルは、中身がそのままMH形式として使えるらしいのだけど、それでも、ファイル名と改行コードを変更しなければならない。しかし、フォルダ数が結構あるので手作業ではやってられない。というわけで、以下のようなperlスクリプトを作って作業をした。
#!/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
と打って使う。やってる事は、 ぐらい。Windows圏はツールが豊富なので、ちゃんと探せば、個別で目的を果たせるツールがありそうな気もするですが。 *2 メールデータが変換できたので、~/Mail/ 以下にコピーして、Meadow2起動後、M-x mew で Mewを立ち上げて確認してみた。Mew起動後の操作は、
  1. 1Z を入力して、フォルダリストを更新。
  2. g を入力して、フォルダ名を選択。
  3. s を入力して、allと打って、サマリを更新。( ~/.mew.el等を修正してサマリ表示形式を変更した場合)
  4. 読みたいメールの上で、spc を押せば、内容が見れる。
ぐらい。

以前と違って「^M」なんて出てこないし、大半は内容を読めてるので大丈夫そう。一部のメールが文字化けしてるのが謎だけど。文字コードが違うのかな。
*1: ちなみに、ActivePerlでファイルを読む場合、何もしないと改行コードがWindows向けに変更されてしまうらしく。binmode(〜) をしておかないとダメみたい。
*2: ちなみに、UNIX環境なら _incなるツールでmbox→mh変換ができる らしいですな。

以上です。

過去ログ表示

Prev - 2004/01 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project