こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

改行を含んだ文字列を正規表現で置換するには?

正規表現で、改行を含んだ文字列を置換しようと思っています。
例えば下の「infile.txt」にある
aaa
bbb
という(2行にわたる)文字列を
zzz
という文字列に変換させたい訳です。
試しに「test.vbs」のようなコードを書いてみましたが、これでは上手く行きませんでした。
上手く変換されるようにするには、どうしたら良いでしょうか?


-----------------------------------------------------
○「test.vbs」の内容
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("C:\infile.txt")
Set outFile = fso.CreateTextFile("C:\outfile.txt")

Set regEx = New RegExp
regEx.pattern = "aaa\nbbb"
repStr = "zzz"

Do Until inFile.AtEndOfStream
tempLine = inFile.ReadLine
repLine = regEx.Replace(tempLine, repStr)
outFile.WriteLine repLine
Loop

inFile.Close
outFile.Close

-----------------------------------------------------
○「C:\infile.txt」の内容
aaa
bbb
ccc

投稿日時 - 2007-10-25 20:20:49

QNo.3460881

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> tempLine = inFile.ReadLine
のReadLineをReadAllに差し替えればよいかと。

ReadAll メソッド
http://msdn.microsoft.com/library/ja/script56/html/jsmthreadall.asp?frame=true

そうすれば、ファイルの内容全体を一つの文字列として得ることが
できますから、普通に文字列相手にするようにすればOK。

wsh vbs メソッド名(ReadLineとか)

で検索すれば、割と簡単に見つけられるのではないかと思います。
もちろん一発ではダメで、何回かキーワードを変えながらたどらないと
上記のMSのページ等にはいけないでしょうけど。

投稿日時 - 2007-10-26 01:28:39

ANo.1

>tempLine = inFile.ReadLine
>repLine = regEx.Replace(tempLine, repStr)

これって、ファイルから1行ずつ読み込んで1行ごとに正規表現チェックしてるようになってないかなあ。
ファイルの内容をすべて読み込んでから一気に変換しないといけない気がする。

#もしかすると、それでもだめかもしれない。
(2行にわたる内容が正規表現に引っかからないかもしれないため)
その場合、改行コードを一時的に別の文字("\n"とか)に変換してからやってみるとうまくいくかも。
もちろん後で元に戻すのは必要。
※メモリ使用量などは一切考慮してません、悪しからず。

投稿日時 - 2007-10-25 22:17:16

補足

neko_nokoさん、早速有り難うございます。
ファイル内容を全て読み込んで一挙に変換する方法は、どこを調べれば良いでしょうか?

投稿日時 - 2007-10-25 22:34:33

あなたにオススメの質問