文字列置換の失敗No.09696
でがらし さん 21/12/06 16:58
 
 同一ファイルにある2つの文字列を置換するために末尾記載のマクロを作成しまし
た。上の2つのマクロの置換はいずれも失敗し、最後のマクロの置換は成功しました。
どこか、悪いところがあるでしょうか? おわかりの方がお見えでしたら、お教え下
さい。

 秀丸 Ver.9.00 です。

1.置換予定文字列

Nyanfi\\NyanFi

BB

---------------------------------------

2.マクロ

replaceallfast "Nyanfi\\NyanFi", "DYNA\\Dyna";//失敗

replaceallfast "NyanFi\\Nyanfi", "DYNA\\Dyna", regular;//失敗

replaceallfast "BB", "CC";//成功

endmacro;

[ ]
RE:09696 文字列置換の失敗No.09697
でるもんたいいじま さん 21/12/06 17:05
 
秀丸愛用者の「でるもんた・いいじま」です。

> 1.置換対象文字列
> Nyanfi\\NyanFi
> BB
>
> ---------------------------------------
>
> 2.マクロ
> replaceallfast "Nyanfi\\NyanFi", "DYNA\\Dyna";//失敗
> replaceallfast "NyanFi\\Nyanfi", "DYNA\\Dyna", regular;//失敗
> replaceallfast "BB", "CC";//成功
> endmacro;
>

マクロの文字列の中では \ は特別な意味を持ちます。
たとえば\nが改行、\tがタブ、"..." の内側に " を入れたけれは \"、といった具合
です。
\ という文字そのものを表現する場合、\\ と2個並べてやっと1文字分になります。

なので最初の例では、
> replaceallfast "Nyanfi\\\\NyanFi", "DYNA\\\\Dyna";//これで大丈夫なはず
とします。
あるいは、最近のバージョンの秀丸では @"..." という書き方が使えますので、それ
を使って
> replaceallfast @"Nyanfi\\NyanFi", @"DYNA\\Dyna";//これでもOK
としてもいいです。

正規表現を使う場合は話がもう少し複雑で、
> replaceallfast "NyanFi\\\\\\\\Nyanfi", "DYNA\\\\Dyna", regular;//ややこしい
> replaceallfast @"NyanFi\\\\Nyanfi", @"DYNA\\Dyna", regular;//こちらを推奨
となります。

[ ]
RE:09697 文字列置換に成功No.09698
でがらし さん 21/12/06 19:35
 
でるもんた・いいじまさん

 ご指示にしたがってマクロを修正し、無事、置換することができました。さっそく
のご教示、ありがとうございました。

 \\ の使い方は、しばらく前にもここでどなたかにご教示いただいていたのでした。
それを忘れて、あれこれ試してみていました。恥ずかしい限りです。

 @ の使い方は、ご教示いただくまで知りませんでした。バージョンアップごとにい
ろいろな変化があるので、秀丸の進化についていっておりません。少々、反省しまし
た。

 まずはお礼まで申し上げます。


[ ]