複数の文字列の置き換えNo.32350
クリスタル さん 13/06/17 08:00
 
事前に作成してあるファイルAの複数の文字列を利用し、別のファイルBの文章に含
まれる同じ文字列を変更するにはどうしたらよいでしょうか?

【例(拡張子は、.txt)】

ファイルA(事前に作られているもの、左側は会社名、右はランク)
 あいう社 <A>
 かきく社 <b>
 さしす社 <A>
 たちつ社 <b>

ファイルB(ある文章をcut&Pastして張り付けたもの)
 あいう社の今年の売り上げは、なにぬ社と比べ良いが、かきく社の方がより利益率
が高い。

上記のファイルBをファイルAを使って下記のようにする。

置き換え後のファイルB
 あいう社<A>の今年の売り上げは、なにぬ社と比べ良いが、かきく社<B>の方がより
利益率が高い。

(なお、あいう社<A>の部分を赤、かきく社<B>の部分を黄色にする)

よろしくお願いします。

[ ]
RE:32350 複数の文字列の置き換えNo.32352
秀丸担当 さん 13/06/17 10:02
 

>事前に作成してあるファイルAの複数の文字列を利用し、別のファイルBの文章に含
>まれる同じ文字列を変更するにはどうしたらよいでしょうか?

あらかじめ作られた一覧を元に置換する機能そのものは無く、自動的にやるとし
たらマクロを使う必要があります。

例えば以下のようなマクロにして実行します。

setcompatiblemode 0x20000;
replaceallfast "あいう社","あいう社<A>";
replaceallfast "かきく社","かきく社<b>";
replaceallfast "さしす社","さしす社<A>";
replaceallfast "たちつ社","たちつ社<b>";

最初の行のsetcompatiblemodeはV8.20以降で検索文字列をマクロ実行前のものに
保持するための文です。

マクロライブラリにある山紫水明さんの作られた変換リストによる連続置換はよ
く使われるようです。
http://hide.maruo.co.jp/lib/macro/listreplace211.html

こちらの場合は以下なような一覧をあらかじめ作っておくといいと思います。

あいう社,あいう社<A>
かきく社,かきく社<b>
さしす社,さしす社<A>
たちつ社,たちつ社<b>



>(なお、あいう社<A>の部分を赤、かきく社<B>の部分を黄色にする)

着色については、テキストファイルは色の情報を保存したりすることは原理的に
できないですが、秀丸エディタの設定として、強調表示する機能があります。

[その他]→[ファイルタイプ別の設定]→[デザイン]→[強調表示]で、「ユーザー
定義」で「<A>」や「<b>」といった文字列を追加しておくことで、テキスト中の
一致する部分がすべて強調されるように指定できます。
強調の色は、[その他]→[ファイルタイプ別の設定]→[デザイン]の「場所の一
覧」の真ん中あたりの強調表示1などの色で指定します。

[ ]
RE:32352 複数の文字列の置き換えNo.32353
クリスタル さん 13/06/17 15:32
 
ありがとうございます。
ご紹介頂いた方法の二つを試してみました。

ただ、下記のように会社名の一部が重複してしまうと、

AME,AME<B>
AMERICA,AMERICA<A>

AMERICAは、AME<B>RICAとなってしまいました。

何か対策はありますでしょうか?

よろしくお願いします。

[ ]
RE:32353 複数の文字列の置き換えNo.32354
秀丸担当 さん 13/06/17 16:22
 

対象が英単語の場合は、「単語の検索」相当のことをすると回避できると思いま
す。

例えば最初の方法の場合
replaceallfast "AME","AME<B>",word;
というように最後に,wordを付けます。

変換リストのマクロの場合はマクロを改変して同じreplaceallfastの箇所につけ
るといいと思います。

英単語ではなくて日本語の場合は簡単にはいかないです。
正規表現を使って余計な部分にはヒットしないような工夫が必要になってくると
思います。

例えば「ア」と「アメリカ」の場合は、「ア」を正規表現を使って
「ア(?!メリカ)」と書くと「アメリカ」にはヒットしなくなります。
マクロで正規表現を使う場合は,regularを付けます。

replaceallfast "ア(?!メリカ)","ア<A>",regular;

変換リストのマクロの場合はマクロを改変しなくてもリストに,regularをつける
といいようです。

[ ]
RE:32354 複数の文字列の置き換えNo.32355
クリスタル さん 13/06/17 18:16
 
ありがとうございました。当面英語だけだと思うので、wordをつけて対応したいと思
います。

ただ、replaceallfastの方式の場合ですが、たくさんの処理をすると、小さなウィン
ドウが頻繁に開いたり閉じたりするため、時間が掛かっているように見受けられます。

スピードアップする手段はありますでしょうか?

度々の質問で恐縮ですがよろしくお願いします。

[ ]
RE:32355 複数の文字列の置き換えNo.32356
秀丸担当 さん 13/06/18 09:21
 

>ただ、replaceallfastの方式の場合ですが、たくさんの処理をすると、小さなウィン
>ドウが頻繁に開いたり閉じたりするため、時間が掛かっているように見受けられます。
>
>スピードアップする手段はありますでしょうか?

disabledraw文で画面の描画をなくして高速にする方法があり、その状態では置
換の経過を表すウィンドウも出なくなります。

マクロの先頭に、
disabledraw;
という一行を追加しておくといいと思います。

[ ]
RE:32356 複数の文字列の置き換えNo.32357
クリスタル さん 13/06/18 11:59
 
ありがとうございました。
驚くほど速くなりました。
感謝感謝です!(^^)

[ ]