VBSで書いたソースで、末尾に改行2コくっついてしまた変数の改行を手軽に1つにしたいという依頼を受けました。
最終的にこんなふうになってしまった変数の中身を、
strData = strData & "10001:XXエラー" & vbCrlf strData = strData & "10002:XXエラー" & vbCrlf strData = strData & "10003:XXエラー" & vbCrlf strData = strData & "10004:XXエラー" & vbCrlf strData = strData & vbCrlf
こうしたい、
strData = strData & "10001:XXエラー" & vbCrlf strData = strData & "10002:XXエラー" & vbCrlf strData = strData & "10003:XXエラー" & vbCrlf strData = strData & "10004:XXエラー" & vbCrlf
というわけですね…。
「strDataに入っているなら、Replace関数を使っちゃえば?」ということで、シンプルにこんな感じでひとまず完了。
strData = Replace(strData, vbCrlf & vbCrlf, vbCrlf)
しかしあまりにシンプルでつまらないので、正規表現だとどうなるのかなー、などと余計な好奇心。
「正規表現であれば、2コ改行以上の改行キーを1つにまとめることもできるなー」ということで、文末にくっついてしまった複数個の改行を1つにするファンクションを書いてみました。
Function ReplaceEnd( strData ) '末尾の1コ以上の改行を1つにまとめる関数 Dim objReg Set objReg = new RegExp objReg.Pattern = "(\r\n)+$" '末尾の1個以上の改行 ReplaceEnd = objReg.Replace(strData, vbCrlf) Set objReg = Nothing End Function
MSDNのヘルプを見ると、\n:改行にマッチします。
と出ているからVBSの改行はてっきり「\n」でいいんだ、と思っていたら、うまくいきませんでした。その原因は、strDataの中で、「vbCrlf」(キャリッジリーターン + ラインフィールド)を使っているからデス。
\r:キャリッジ リターンにマッチします。
ということなので、「vbCrlf」は「\r\n」で表現すればいいわけなんですね…。
正規表現は正直なところ、冷や汗が出るほど苦手なんですが、ベンリだなー、とは認識しているので、今後とも用心深くコネタでちまちま実験していきたいです。
ついでに末尾に拘らず、2コ以上の改行を1つにまとめる関数を作成しました。EmEditorのマクロでも使えそうなネタですね。
Function ReplaceCrlfDel( strData ) '2コ以上の改行を1つにまとめる関数 Dim objReg Set objReg = new RegExp objReg.Global = True objReg.Pattern = "(\r\n)+" ReplaceCrlfDel = objReg.Replace(strData, vbCrlf) Set objReg = Nothing End Function
0 件のコメント:
コメントを投稿