VBSの質問です

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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/12/28 01:23:19
  • 終了:2013/12/28 11:56:28
id:takanii
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

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4558ベストアンサー獲得回数19032013/12/28 10:06:04

ポイント200pt

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 で表します。

id:takanii

なるほど、そこがダメだったのですね。
ありがとうございました

2013/12/28 11:56:22

その他の回答(0件)

id:a-kuma3 No.1

a-kuma3回答回数4558ベストアンサー獲得回数19032013/12/28 10:06:04ここでベストアンサー

ポイント200pt

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 で表します。

id:takanii

なるほど、そこがダメだったのですね。
ありがとうございました

2013/12/28 11:56:22

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません