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

VBSの質問です
以下の様なテキストが入ったテキストファイルがたくさんあります
*************
<tr>
<td>hoge1</td>
<td>hoge2</td>
<td>hoge3</td>
</tr>
*************

これを一番最後の<td>行を消して
*************
<tr>
<td>hoge1</td>
<td>hoge2</td>
</tr>
*************
以上のように上書き保存したいので以下の様なのを作成しましたがうまく動きません
どこが悪いのでしょうか?

●質問者: takanii
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から
Option Explicit
Const TARGET_FOLDER = "C:\hoge"
Dim REPLACE_FROM
REPLACE_FROM = "^<td>.*"+ Chr(13) + Chr(10) + "</tr>"
Const REPLACE_TO = "</tr>"

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
 Dim strFilePath, infile, outfile, strData
 strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
 Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
 strData = infile.ReadAll
 infile.Close
 Set infile = Nothing
 Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting) '(上書き)
 outfile.Write Replace(strData,REPLACE_FROM,REPLACE_TO)
 outfile.Close
 Set outfile = Nothing
Next

1 ● a-kuma3
●200ポイント ベストアンサー

Replace 関数は指定された文字をそのまま探すだけで、.* のような正規表現には対応していません。
正規表現を使った置き換えには RegExp クラスを使います。

Option Explicit
Const TARGET_FOLDER = "C:\hoge"
Dim REPLACE_FROM
Set REPLACE_FROM = New RegExp  ' ★
REPLACE_FROM.Pattern = "^<td>.*\n</tr>"  ' ★
REPLACE_FROM.Global = True  ' ★
REPLACE_FROM.Multiline = True  ' ★
Const REPLACE_TO = "</tr>"

Const ForReading = 1 '読み込み
Const ForWriting = 2 '書きこみ(上書きモード)
Const ForAppending = 8 '書きこみ(追記モード)

Dim objFSO, objFolder, objFile, objSubFolder, objTXT
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(TARGET_FOLDER)

For Each objFile In objFolder.Files
 Dim strFilePath, infile, outfile, strData
 strFilePath = objFSO.BuildPath(TARGET_FOLDER, objFile.Name)
 Set infile = objFSO.OpenTextFile(strFilePath,ForReading)
 strData = infile.ReadAll
 infile.Close
 Set infile = Nothing
 Set outfile = objFSO.OpenTextFile(strFilePath,ForWriting)  '(上書き)
 outfile.Write REPLACE_FROM.Replace(strData, REPLACE_TO)  ' ★
 outfile.Close
 Set outfile = Nothing
Next

末尾に★をつけた行が変更した箇所です。

因みに正規表現の場合は、改行は \n で表します。


takaniiさんのコメント
なるほど、そこがダメだったのですね。 ありがとうございました
関連質問

●質問をもっと探す●



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