人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows Script Host(wsh)を用いてテキストファイルを書き換える方法を教えてください。

aaa.txtというファイルに、
-----
1,a,b
-----
と入っているときに、これを
-----
2,a,b
-----
と書き換えたいです。

・かならず、上記のような形式で1行データが入っています。
・最初のカンマまでの数字を1増やしたいです。
・それ以外は、何も書き換えないようにしたいです。

繰り返し実行すると
3,a,b
4,a,b
5,a,b
と変化していくようにしたいです。

●質問者: bonyan
●カテゴリ:コンピュータ
✍キーワード:AAA SCRIPT txt Windows WSH
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● van-dine
●100ポイント ベストアンサー

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の方が正規検索の使い勝手が良いです。

◎質問者からの返答

ありがとうございました。希望通りの動作をしています。

これにて質問を終了させていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ