以下のプログラムがうまく動きません。
一番したの置換がうまく働きません。どこをいじればいいでしょうか?
'画像リンク書換
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
strFind = "<img src = """
strReplace = "<img src = """ & strTargetName & "/"
strFind = "<td align=""center"" valign=""top"">"
strReplace = "<td>" & strTargetName & "</td><td>"
Set re = New RegExp
re.Multiline = True
re.Pattern = strFind
re.Global = True
strNewText = re.Replace(strOldText, strReplace)
file.Close
Set file2 = fso.CreateTextFile( strOutputFileName )
file2.WriteLine (strNewText)
file2.Close
End Sub
元ネタはこれですかね。
http://q.hatena.ne.jp/1362497323#a1192706
原因はあなたが2行追加した場所と必要な1行が足りないことでしょう。
strFind = "<td align=""center"" valign=""top"">" strReplace = "<td>" & strTargetName & "</td><td>"
置換はこの7行でワンセットです。
strFind = "<img src = """ strReplace = "<img src = """ & strTargetName & "/" Set re = New RegExp re.Multiline = True re.Pattern = strFind re.Global = True strNewText = re.Replace(strOldText, strReplace)
元の7行を理解しやすいように少し順序を変えます。
' オブジェクトの準備と基本パラメータの設定 Set re = New RegExp re.Multiline = True re.Global = True ' 置換条件の設定と置換実行 strFind = "<img src = """ strReplace = "<img src = """ & strTargetName & "/" re.Pattern = strFind strNewText = re.Replace(strOldText, strReplace)
新たな置換を追加して10行になります。
' オブジェクトの準備とパラメータ設定 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)
置換は先に書いたほうから順に実行されるので複雑な置換を行う場合は注意が必要です。