改行を無視して検索・置換したいときのためのマクロ
サクラエディタでは複数行にまたがった検索が行えないため、
「一旦改行コードを別の文字列に置き換え」→「検索・置換」→「置き換えた文字列を改行コードに戻す」
という手段をとることにしました。
改行コードを別の文字列に置き換えるマクロ
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@@@@@」となります。
申し訳程度に警告が出るようにはしてありますが、処理としては完璧ではないですね。