重複する行を整理するには?No.01526
ちづ さん 00/09/27 11:51
 
みなさん、こんにちは。

ファイルに同一内容の複数の行がある場合に、
重複している余分な行を削除して、整理するマクロを作りたいのですが、
どうしたら良いかわかりません。
教えていただければ幸いです。

        ちづ

[ ]
RE:01526 重複する行を整理するには?No.01527
番頭++ さん 00/09/27 13:06
 
>ファイルに同一内容の複数の行がある場合に、
>重複している余分な行を削除して、整理するマクロを作りたいのですが、
こんな感じです。

a1.mac です。
//  "Delete Same Word "
ppkn_del_same_word1:
    question "Delete Same Word ?";
    if( ! result ){ endmacro;   }
    escape; gofiletop;  disabledraw;    disableinvert;
    selectword; // delete same word - 単語
    $wk1 = gettext(seltopx,seltopy,selendx,selendy);
    escape; down;
    while( code != eof){
        selectword; // delete same word - 単語
        $wk2 = gettext(seltopx,seltopy,selendx,selendy);
        escape;
        if( $wk1 == $wk2 ){
            deleteline;
        } else {
            $wk1 = $wk2;    down;
        }
    }
    gofiletop;  enabledraw;
endmacro;

a2.mac です。
//  "Delete Same Line "
ppkn_del_same_line1:
    question "Delete Same Line ?";
    if( ! result ){ endmacro;   }
    escape; gofiletop;  disabledraw;    disableinvert;
    selectline; // delete same line - 行
    $wk1 = gettext(seltopx,seltopy,selendx,selendy);
    escape; down;
    while( code != eof){
        selectline; // delete same line - 行
        $wk2 = gettext(seltopx,seltopy,selendx,selendy);
        escape;
        if( $wk1 == $wk2 ){
            deleteline;
        } else {
            $wk1 = $wk2;    down;
        }
    }
    gofiletop;  enabledraw;
endmacro;

あとは、Vector とかで SSORT32.exe とかを使用すると、
ソート、重複行の削除が、メチャ速くなります。

試してはいかがですか ...

[ ]
RE:01527 重複する行を整理するには?No.01537
ちづ さん 00/09/30 18:32
 
番頭++さん

ありがとうございました。
感じはわかりました。
教えていただいたマクロだとファイルの先頭行と重複した行で
1回目に出てきたものしか削除しないのですが、
実は、ファイルの先頭行でない行と重複した行や
2回目、3回目の重複も削除できるようにしたいのです。

本業は翻訳ですが、作業の効率を上げるため
マクロを使う必要があって、
プログラミングの「プ」も知らないレベルから
恥ずかしながら四十の手習いでスタートして、目下勉強中です。
少し感じをつかんできたので、頭に余裕があるときに
トライしてみます。

1つ質問してよいですか。

a2.mac の

>        if( $wk1 == $wk2 ){
>            deleteline;
>        } else {
>            $wk1 = $wk2;    down;
>        }

の else 以下の部分は $wk1 に $wk2 を代入する、という
意味だと思うのですが、これは続きを書くためでしょうか…?

困ったときだけ質問にきてすみません。

         ちづ





[ ]
RE:01537 重複する行を整理するには?No.01538
ENCODINGSHIFTJIS さん 00/10/02 10:16
 
>教えていただいたマクロだとファイルの先頭行と重複した行で
>1回目に出てきたものしか削除しないのですが、
>実は、ファイルの先頭行でない行と重複した行や
>2回目、3回目の重複も削除できるようにしたいのです。

マクロを適用する条件は 行ソート後です、直前の行と比較して
連続の出現を削除します。

もし、行単一化後に元の行順序に戻したいなら、
最初に 行番号 ,  を付けてから行をソートして、単一化
その後 行番号でソートして元の順に戻す。 になるでしょう

[ ]
RE:01538 重複する行を整理するには?No.01539
ちづ さん 00/10/02 15:29
 
ENCODINGSHIFTJIS さん

>マクロを適用する条件は 行ソート後です、直前の行と比較して
>連続の出現を削除します。

あ…そうか、鳴るほど…、と思って、今度はソートする方法を捜すため
こちらのログの履歴をみたところ、ソート方法も重複行の削除も
以前にどなたかが質問されて、回答が書かれていました。

番頭++さん、ENCODINGSHIFTJIS さん、ちゃんと調べずに
質問して申し訳ありません。

それで、番頭++さんに教えていただいた SSORT32 を Vector から
ダウンロードしてきたところ、使いやすいし速いし、感動!です。
どうもありがとうございました!

[ ]