- 締切済み
改行を含んだ文字列を正規表現で置換するには?
正規表現で、改行を含んだ文字列を置換しようと思っています。 例えば下の「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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
> tempLine = inFile.ReadLine のReadLineをReadAllに差し替えればよいかと。 ReadAll メソッド http://msdn.microsoft.com/library/ja/script56/html/jsmthreadall.asp?frame=true そうすれば、ファイルの内容全体を一つの文字列として得ることが できますから、普通に文字列相手にするようにすればOK。 wsh vbs メソッド名(ReadLineとか) で検索すれば、割と簡単に見つけられるのではないかと思います。 もちろん一発ではダメで、何回かキーワードを変えながらたどらないと 上記のMSのページ等にはいけないでしょうけど。
- neko_noko
- ベストアンサー率45% (146/319)
>tempLine = inFile.ReadLine >repLine = regEx.Replace(tempLine, repStr) これって、ファイルから1行ずつ読み込んで1行ごとに正規表現チェックしてるようになってないかなあ。 ファイルの内容をすべて読み込んでから一気に変換しないといけない気がする。 #もしかすると、それでもだめかもしれない。 (2行にわたる内容が正規表現に引っかからないかもしれないため) その場合、改行コードを一時的に別の文字("\n"とか)に変換してからやってみるとうまくいくかも。 もちろん後で元に戻すのは必要。 ※メモリ使用量などは一切考慮してません、悪しからず。
補足
neko_nokoさん、早速有り難うございます。 ファイル内容を全て読み込んで一挙に変換する方法は、どこを調べれば良いでしょうか?