アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

('ω') < 転職してフロントエンド勉強中 あとFE聖戦1周クリアしてトラキアやりながらSQX待ち

改行を無視して検索・置換したいときのためのマクロ

サクラエディタでは複数行にまたがった検索が行えないため、
「一旦改行コードを別の文字列に置き換え」→「検索・置換」→「置き換えた文字列を改行コードに戻す」
という手段をとることにしました。

改行コードを別の文字列に置き換えるマクロ

CR, LF, CRLFをそれぞれ適当な文字列に置き換えます。
ここでは「@@@@@RN@@@@@」のような形に置き換えていますが、
そこはお好みと実用性で適宜いい感じに。

Dim dlm
dlm = "@@@@@"

Dim x
x = Editor.SearchNext(dlm, 34)
If Editor.GetSelectedString() <> "" Then
    MsgBox "デリミタ文字「" & dlm & "」が含まれているため、このマクロは利用できません。"
Else
    x = Editor.ReplaceAll("\r\n", dlm & "RN" & dlm, 38)
    x = Editor.ReplaceAll("\r"  , dlm & "R" & dlm , 38)
    x = Editor.ReplaceAll("\n"  , dlm & "N" & dlm , 38)
    Editor.ReDraw(0)
End If

特定文字列を改行コードに置き換えるマクロ

こちらは「@@@@@RN@@@@@」のような文字列を
対応する文字コードに置き換えています。

Dim dlm
dlm = "@@@@@"

Dim x
x = Editor.ReplaceAll(dlm & "RN" & dlm, "\r\n", 38)
x = Editor.ReplaceAll(dlm & "R" & dlm , "\r"  , 38)
x = Editor.ReplaceAll(dlm & "N" & dlm , "\n"  , 38)
Editor.ReDraw(0)

x = Editor.SearchNext(dlm, 34)
If Editor.GetSelectedString() <> "" Then
    MsgBox "デリミタ文字「" & dlm & "」が残っています。正しく処理されているか確認してください。"
End If

問題点

改行コードを特定文字に置き換えるのは(おそらく)問題ないのですが
例えば「@@@@@R@@@@@RN@@@@@R@@@@@」という文字列を改行ありの状態に戻すとき、
「\rRN\r」としてほしくても「@@@@@R\r\nR@@@@@」となります。
申し訳程度に警告が出るようにはしてありますが、処理としては完璧ではないですね。