質問: 急ぎにつき乱文失礼します。 複数のテキストファイルから、重複している行を削除し、一意にしたいのですが、どのような方法があるでしょうか? 例としては以下になります。 ``` ・テキストファイルA.txt あああ あああ いいい いいい ううう ううう ・テキストファイルB.txt あああ あああ いいい おおお えええ えええ ``` この内、両ファイルで重複している「あああ あああ」の行を片方削除したいです。 また、「いいい いいい」と「いいい おおお」の行は一部文字列が異なりますが、これも重複行としてカウントし、片方削除したいです。 よろしくお願いします。 追記です >また、「いいい いいい」と「いいい おおお」の行は一部文字列が異なりますが、これも重複行としてカウントし、片方削除したいです。 これについての重複と判断するルールです。 以下のようにコロンで区切られていて前半だけ一致して後半が一致していない場合でも重複としてカウントしたいです。 いいい:いいい いいい:おおお ただし、以下のようにコロンで区切られた文字が2~7組で可変する可能性があります。 これらを全て重複としてカウントしたいです。 いいい:いいい いいい:いいい:おおお いいい:いいい:えええ:おおお
回答: 秀丸マクロを書いたことがないので (キー操作の記録・再生しか使ったことがない)、実際の関数名などがよくわかりませんが、次のようなことをすればできるのではないでしょうか。 最初のファイルを「1.txt」、2つめを「2.txt」とします。 ``` "1.txt" にフォーカスを移す; テキストの一番最初に移動; while (カーソルがファイル末尾にない) { ワード選択; // 行頭から最初の ":" か空白の直前までを選択 if (何か選択されている) { コピー; "2.txt" にフォーカスを移す。 「"^" + クリップボードの内容 + "([: ].*)?\n"」としてできる正規表現にマッチするものをすべて "" に置換する; "1.txt" にフォーカスを移す; } 論理行末に移動; カーソル右移動; // 次の論理行の行頭に移動 } ``` 終了した時点で、2.txtの中の1.txtと重複する行が全て取り除かれているはずです (なお、1.txt自身の中に互いに重複する行があっても、取り除かれません)。 「ワード選択」の箇所は、フィールドにひらがなしか含まないという前提ですが、数字なども混在するのならうまくいかないかもしれません。工夫して下さい。また、フィールドに正規表現のメタキャラクタが含まれ得るのなら、正規表現を作るところではエスケープする必要があります。