◀マクロトップへ
  • 226 複数のパターンで置換処理を行う PerlScript
    • 303 管理人削除
  • [226] 複数のパターンで置換処理を行う PerlScript miau 2005年11月07日 01:38

    http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=macro&tree=c200 を流用して作ってみました。
    (URL にちょっとだけ説明があります)

    =head1 NAME

    MultiReplace.pls - 複数のパターンに基づく置換処理

    =head1 DESCRIPTION

    パターンファイル(MultiReplace.txt)の記述に基づいて、選択部分の置換処理を行う。

    パターンファイルの各行には「B<pattern>\tB<replacement>」を記述してください。

    (例)

    & &amp;
    < &lt;
    > &gt;

    ※POD なので先頭に TAB 入れてますが、実際は記述不要です。

    置換は先頭から順に処理されます。

    未選択状態の場合、パターンファイルを開きます。

    =cut

    use strict;
    use warnings;

    use encoding 'cp932';
    binmode(STDERR, ':raw :encoding(cp932)');

    use Encode;

    use Win32::OLE qw/CP_UTF8/;
    Win32::OLE->Option(CP => CP_UTF8); # OLE のインターフェイスを UTF8 に

    # パターンファイルの名称取得
    my $macfile = ExpandParameter('$M'); # マクロファイル名
    (my $patfile = $macfile) =~ s/[^.]+$/txt/; # パターンファイル名は拡張子を .txt にしたもの

    # 選択部分の取得
    unless (IsTextSelected()) {
    # 未選択時はパターンファイルを開いて終了
    FileOpen($patfile);
    exit(0);
    }
    my $seltext = GetSelectedString(0);

    # パターンファイルの読み込み
    $patfile = encode('cp932', $patfile); # ファイル名は cp932
    open PAT, "<:encoding(cp932)", $patfile or die "can't open $patfile: $!";
    my @lines = <PAT>;
    close PAT;

    # 置換箇所のカウント
    my $count = 0;

    foreach my $line (@lines) {
    # 改行の除去
    $line =~ s/\r?\n//;
    my ($pattern, $replacement) = split(/\t/, $line, 2);

    # 置換処理の実行
    eval { $count += ($seltext =~ s/$pattern/$replacement/g); };

    # エラー時
    if ($@) {
    MsgBox($@); # エラー表示
    FileOpen($patfile); # パターンファイルを開く
    exit(1);
    }
    }

    # 置換結果の出力
    InsText($seltext);

    # 件数の出力
    $count = 0 if $count eq '';
    MsgBox(encode('cp932', "$count 箇所を置換しました。"));

    #...............................................................................
    #...............................................................................
    #...............................................................................
    #...............................................................................
    • [303] 管理人削除 - 2006年10月30日 21:20

      -