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

VBSの質問です
以下のプログラムがうまく動きません。
一番したの置換がうまく働きません。どこをいじればいいでしょうか?

'画像リンク書換
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

●質問者: 匿名質問者
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● 匿名回答1号
ベストアンサー

元ネタはこれですかね。
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)

置換は先に書いたほうから順に実行されるので複雑な置換を行う場合は注意が必要です。


匿名回答1号さんのコメント
http://q.hatena.ne.jp/1362853839#a1193087 この回答は「うぃんど(id:windofjuly)」が行いましたとコメントしておきます。

匿名回答1号さんのコメント
別の質問で正常に動かないというご指摘を受け訂正しました。 re.Pattern = strFind を書く場所が変わっていますのでご確認ください。
関連質問

●質問をもっと探す●



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