VBSの質問です

以下のスクリプトを実行した場合 2番目の置換条件が適応されないのですがどこがダメなのでしょうか?教えてください。
元ネタはこちらです http://q.hatena.ne.jp/1362838683

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/13 00:39:40
  • 終了:2013/03/20 00:40:06
id:takanii

'ファイルネームリネーム
Call Main()
Sub Main()
Dim fso ' ファイルシステムオブジェクト
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folder
Set folder = fso.GetFolder(".")
Dim strTargetName ' 対象フォルダ名
Dim strInputFileName ' 入力ファイル名
Dim strOutputFileName ' 出力ファイル名
Dim subFolder
For Each subFolder In folder.SubFolders
strTargetName = subFolder.Name
' フォルダ名が数字の場合、処理対象とする
If IsNumeric( strTargetName ) Then
strInputFileName = subFolder & "\aa.html"
strOutputFileName = folder.Path & "\bb\" & strTargetName & ".html"
Call ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName )
End If
Next
End Sub
Sub ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName )
Dim file ' 対象ファイル
Dim file2 ' 書き込み先ファイル
Dim re ' 正規表現オブジェクト
Dim strOldText ' 置換前テキスト
Dim strNewText ' 置換後テキスト
Dim strFind ' 検索文字列
Dim strReplace ' 置換文字列
Set file = fso.OpenTextFile( strInputFileName )
strOldText = file.ReadAll
'オブジェクトの準備とパラメータ設定
Set re = New RegExp
re.Multiline = True
re.Global = True
'置換1
strFind = "
strReplace = "
re.Pattern = strFind
strNewText = re.Replace(strOldText, strReplace)
' 置換2
strFind = "abcd"
strReplace = "ab" & strTargetName & "cd"
re.Pattern = strFind
strNewText = re.Replace(strNewText, strReplace)
file.Close
Set file2 = fso.CreateTextFile( strOutputFileName )
file2.WriteLine (strNewText)
file2.Close
End Sub

回答(0件)

回答はまだありません

  • id:windofjuly
    うぃんど 2013/03/13 00:59:01
    とりあえずですが、下記の部分が途切れています。

    '置換1
    strFind = "
    strReplace = "

    他にも削れているところがあるかもしれませんので、
    「質問者から」の欄でコードを記入する際には「はてな記法」の「PRE記法」を使ってください。

    >||

    コードの上下に、このコメントのように >|| と ||< を書くと、
    回答者が使っているような黒地でのコード表記が可能となり、
    HTMLタグや先頭のスペースなども削除されません。

    ||<

    もしくは、昔からある、このコメント欄を使っても良いです。
    このコメントを書いているコメント欄では「はてな記法」は無効化されますが、
    この位置のコメント欄であればソースコードにHTMLタグがあっても削られたりしません。
  • id:takanii
    'ファイルネームリネーム
    Call Main()
    Sub Main()
    Dim fso ' ファイルシステムオブジェクト
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim folder
    Set folder = fso.GetFolder(".")
    Dim strTargetName ' 対象フォルダ名
    Dim strInputFileName ' 入力ファイル名
    Dim strOutputFileName ' 出力ファイル名
    Dim subFolder
    For Each subFolder In folder.SubFolders
    strTargetName = subFolder.Name
    ' フォルダ名が数字の場合、処理対象とする
    If IsNumeric( strTargetName ) Then
    strInputFileName = subFolder & "\test.html"
    strOutputFileName = folder.Path & "\問題\" & strTargetName & ".html"
    Call ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName )
    End If
    Next
    End Sub

    Sub ChangePathName( fso, strTargetName, strInputFileName, strOutputFileName )

    Dim file ' 対象ファイル
    Dim file2 ' 書き込み先ファイル
    Dim re ' 正規表現オブジェクト
    Dim strOldText ' 置換前テキスト
    Dim strNewText ' 置換後テキスト
    Dim strFind ' 検索文字列
    Dim strReplace ' 置換文字列
    Set file = fso.OpenTextFile( strInputFileName )
    strOldText = file.ReadAll
    ' オブジェクトの準備とパラメータ設定
    Set re = New RegExp
    re.Multiline = True
    re.Global = True
    ' 置換1
    strFind = "<img src = """
    strReplace = "<img src = """ & strTargetName & "/"
    re.Pattern = strFind
    strNewText = re.Replace(strOldText, strReplace)
    ' 置換2
    strFind = "<td align=""center"" valign=""top"">"
    strReplace = "<td>" & strTargetName & "</td><td>"
    re.Pattern = strFind
    strNewText = re.Replace(strNewText, strReplace)

    file.Close
    Set file2 = fso.CreateTextFile( strOutputFileName )
    file2.WriteLine (strNewText)
    file2.Close
    End Sub
  • id:windofjuly
    うぃんど 2013/03/13 01:30:11
    置換の部分を抜き出してみると、前回のとおり動きましたので、
    元データのほうに <td align="center" valign="top"> が無いのだと思います。

    元々、正規表現を使わない形での置換パターンとなっていましたのでそのままにしています。
    従って、
    <td align="center" valign="top"> と一字一句違わなければ置換されますが、
    <TD align="center" valign="top"> や
    <td align="center" valign="top" > のように一字でも違えば置換対象にはなりませんし、
    <td valign="top" align="center"> のように順番が違っても置換対象になりません。

    まずは元のデータがどのようになっているかを調べてください。
    そしてパターンを抜き出してください。

    パターンはそちらで作るか、元のデータを開示してもらうかになります。
    正規表現での対応はパターンを定義してもらわないと書けません。

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

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

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

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