aaa.txtというファイルに、
-----
1,a,b
-----
と入っているときに、これを
-----
2,a,b
-----
と書き換えたいです。
・かならず、上記のような形式で1行データが入っています。
・最初のカンマまでの数字を1増やしたいです。
・それ以外は、何も書き換えないようにしたいです。
繰り返し実行すると
3,a,b
4,a,b
5,a,b
と変化していくようにしたいです。
JavaScript
var FSO = new ActiveXObject("Scripting.FileSystemObject"); var tmpNm = FSO.GetTempName(); var IPF = FSO.OpenTextFile("aaa.txt", 1, false); var OPF = FSO.OpenTextFile(tmpNm , 2, true); while(!IPF.AtEndOfStream) { var str = IPF.ReadLine(); var mch = str.match(/^(\d+),a,b$/); if(mch) { OPF.WriteLine((parseInt(mch[1]) + 1) + ",a,b"); } else { OPF.WriteLine(str); } } IPF.Close(); OPF.Close(); IPF = null; OPF = null; var tmpFl = FSO.GetFile(tmpNm); tmpFl.Copy("aaa.txt", true); tmpFl.Delete(true); tmpFl = null;
VBScript
Set FSO = CreateObject("Scripting.FileSystemObject") tmpNm = FSO.GetTempName Set RegTrgt = New RegExp With RegTrgt .Pattern = "^(\d+),a,b$" .IgnoreCase = False .Global = False End With Set IPF = FSO.OpenTextFile("aaa.txt", 1, false) Set OPF = FSO.OpenTextFile(tmpNm , 2, true ) Do Until IPF.AtEndOfStream str = IPF.ReadLine If regTrgt.Test(str) Then OPF.WriteLine (RegTrgt.Execute(str)(0).SubMatches(0) + 1) & ",a,b" Else OPF.WriteLine str End If Loop IPF.Close OPF.Close Set IPF = Nothing Set OPF = Nothing Set tmpFl = FSO.GetFile(tmpNm) tmpFl.Copy "aaa.txt", true tmpFl.Delete true Set tmpFl = Nothing
書き換えには、正規検索を使っています。
JavaScriptの方が正規検索の使い勝手が良いです。
ありがとうございました。希望通りの動作をしています。
これにて質問を終了させていただきます。