匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

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人5回まで
  • 13歳以上
  • 登録:2013/03/09 23:18:03
  • 終了:2013/03/10 04:12:38

ベストアンサー

匿名回答1号 No.1

匿名回答1号「匿名質問」を利用した質問に回答すると「匿名回答○号」と匿名で表示されます。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら
2013/03/10 01:24:48

元ネタはこれですかね。
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)」が行いましたとコメントしておきます。

2013/03/10 03:37:51
匿名回答1号

別の質問で正常に動かないというご指摘を受け訂正しました。

re.Pattern = strFind を書く場所が変わっていますのでご確認ください。

2013/03/10 04:06:46

コメントはまだありません

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

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

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

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