このファイルに、バナー広告を差し込みたいと
思っております。
●</div>というタグが13回出現した後に
広告を差し込みたいです。
こんなことが可能な一括テキスト変換ソフト等
ありますでしょうか?
上記が無いようでしたら、
26行目というように行指定で差込が出来るような
ソフトでもOKです。
どうぞよろしくお願いいたします。
Windows 前提の回答です。違いましたらすいません。
下記を拡張子 ".VBS" にして適当なファイル名で保存します。
挿入する内容を記載したファイルを用意し、ファイルパスを4行目の INSERT_FILE に書きます。
変換対象のHTML ファイルを置いているフォルダ位置を5行目の HTML_FOLDER に書きます。
Option Explicit '--------------------------------------------------------------------- Const INSERT_FILE = "C:\Data\insert.txt" '--- 挿入するファイル名の指定 Const HTML_FOLDER = "C:\HTMLFiles" '--- 変換対象ファイルのフォルダを指定 Const KEY_WORD = "</div>" '--- 検索するタグの指定 Const KEY_COUNT = 13 '--- 検索後の置換して位置 '--------------------------------------------------------------------- Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists( INSERT_FILE ) = False Then WScript.Echo "挿入データファイル【" & INSERT_FILE & "】がありません: " WScript.Quit End If Dim insData insData = fso.OpenTextFile( INSERT_FILE ).ReadAll() Dim fCount Dim hFile Dim txtData Dim pos '--- 指定フォルダ内の HTML ファイルを処理 For Each hFile In fso.GetFolder( HTML_FOLDER ).Files '--- 拡張子のチェック --- If UCase( fso.GetExtensionName( hFile ) ) = "HTML" Then txtData = fso.OpenTextFile( hFile.Path ).ReadAll() pos = getPos( txtData ) If pos > 0 Then If Mid( txtData, pos + 1, 1 ) = Chr(10) Or Mid( txtData, pos + 1, 1 ) = Chr(13) Then txtData = Left( txtData, pos ) & vbNewLine & insData & Mid( txtData, pos + 1 ) Else txtData = Left( txtData, pos ) & vbNewLine & insData & vbNewLine & Mid( txtData, pos + 1 ) End If '--- ファイルをバックアップして更新 --- fso.CopyFile hFile.Path, hFile.Path & ".bak" '--- バックアップが不要な場合はこの行を削除 fso.CreateTextFile( hFile.Path, True ).Write txtData fCount = fCount + 1 Else '--- タグが指定回数ない WScript.Echo hFile.Name & ":指定回数の " & KEY_WORD & " がありません。" End If End If Next WScript.Echo fCount & " 個のファイルを処理しました。" '--------------------------------------------------------------------- ' 挿入位置の検索 '--------------------------------------------------------------------- Function getPos( txtData ) '--------------------------------------------------------------------- Dim sPos Dim dCount sPos= InStr( txtData, KEY_WORD ) Do While sPos > 0 dCount = dCount + 1 If dCount = KEY_COUNT Then getPos = sPos + Len( KEY_WORD ) - 1 Exit Function End If sPos = InStr( sPos+ 1, txtData, KEY_WORD ) Loop End Function
修正・保存したファイルを実行(ダブルクリック)でご希望の処理が実行されないでしょうか。
不明な点はコメントで補足します。
前置き。1番目の回答者やそれと同じ回答をしているユーザーは片っ端から拒否リストに入れておくと良いですよ。
本題。こんなのどうでしょうか。結構手軽で、処理もかなり速かったです。
どうもありがとうございます。
正規表現を使用できる置換ソフトを使用してはいかがでしょうか?
※正規表現で最短マッチができれば、どのソフトでも可能だと思います。
「Repl-Ace on .NET」では以下の正規表現で可能でした。
http://www.forest.impress.co.jp/lib/sys/file/filesearch/repl_ace...
検索文字列:((?:.*?</div>){13})
置換文字列:$1挿入する広告タグを記述
※「正規表現を使う」「改行(\n)を文字とみなす」にチェックを入れる
※事前に、Step2で検索した対象ファイルの一覧の文字セットを確認してください。
(文字コードを正常に認識できない場合がありますので、Step1で「文字セットを~」のチェックを外して検索を実行した方が良さそうです。
※この場合は、Step2で「他の機能」→「デフォルトの文字セット」および「デフォルトの改行文字」を対象ファイルに合わせて指定して置いてください。)
※文字コードが他のファイルと異なる場合は、一覧のファイルを右クリックで選択してファイルのみ変更できます。
その他、分からない事がある場合はコメントでフォローしますので、出来れば開けて置いてください。
出来ました。
どうもありがとうございます。
ただ、< /div>が13個無いファイルの処理に
時間がかかるようでした。
Windows 前提の回答です。違いましたらすいません。
下記を拡張子 ".VBS" にして適当なファイル名で保存します。
挿入する内容を記載したファイルを用意し、ファイルパスを4行目の INSERT_FILE に書きます。
変換対象のHTML ファイルを置いているフォルダ位置を5行目の HTML_FOLDER に書きます。
Option Explicit '--------------------------------------------------------------------- Const INSERT_FILE = "C:\Data\insert.txt" '--- 挿入するファイル名の指定 Const HTML_FOLDER = "C:\HTMLFiles" '--- 変換対象ファイルのフォルダを指定 Const KEY_WORD = "</div>" '--- 検索するタグの指定 Const KEY_COUNT = 13 '--- 検索後の置換して位置 '--------------------------------------------------------------------- Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists( INSERT_FILE ) = False Then WScript.Echo "挿入データファイル【" & INSERT_FILE & "】がありません: " WScript.Quit End If Dim insData insData = fso.OpenTextFile( INSERT_FILE ).ReadAll() Dim fCount Dim hFile Dim txtData Dim pos '--- 指定フォルダ内の HTML ファイルを処理 For Each hFile In fso.GetFolder( HTML_FOLDER ).Files '--- 拡張子のチェック --- If UCase( fso.GetExtensionName( hFile ) ) = "HTML" Then txtData = fso.OpenTextFile( hFile.Path ).ReadAll() pos = getPos( txtData ) If pos > 0 Then If Mid( txtData, pos + 1, 1 ) = Chr(10) Or Mid( txtData, pos + 1, 1 ) = Chr(13) Then txtData = Left( txtData, pos ) & vbNewLine & insData & Mid( txtData, pos + 1 ) Else txtData = Left( txtData, pos ) & vbNewLine & insData & vbNewLine & Mid( txtData, pos + 1 ) End If '--- ファイルをバックアップして更新 --- fso.CopyFile hFile.Path, hFile.Path & ".bak" '--- バックアップが不要な場合はこの行を削除 fso.CreateTextFile( hFile.Path, True ).Write txtData fCount = fCount + 1 Else '--- タグが指定回数ない WScript.Echo hFile.Name & ":指定回数の " & KEY_WORD & " がありません。" End If End If Next WScript.Echo fCount & " 個のファイルを処理しました。" '--------------------------------------------------------------------- ' 挿入位置の検索 '--------------------------------------------------------------------- Function getPos( txtData ) '--------------------------------------------------------------------- Dim sPos Dim dCount sPos= InStr( txtData, KEY_WORD ) Do While sPos > 0 dCount = dCount + 1 If dCount = KEY_COUNT Then getPos = sPos + Len( KEY_WORD ) - 1 Exit Function End If sPos = InStr( sPos+ 1, txtData, KEY_WORD ) Loop End Function
修正・保存したファイルを実行(ダブルクリック)でご希望の処理が実行されないでしょうか。
不明な点はコメントで補足します。
出来ました。
どうもありがとうございます。
出来ました。
どうもありがとうございます。