250ぐらいのhtmlがあります。


このファイルに、バナー広告を差し込みたいと
思っております。


●</div>というタグが13回出現した後に
広告を差し込みたいです。


こんなことが可能な一括テキスト変換ソフト等
ありますでしょうか?


上記が無いようでしたら、
26行目というように行指定で差込が出来るような
ソフトでもOKです。


どうぞよろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2009/04/25 10:30:50
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.5

回答回数1314ベストアンサー獲得回数393

ポイント800pt

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

修正・保存したファイルを実行(ダブルクリック)でご希望の処理が実行されないでしょうか。

http://www.whitire.com/vbs/


不明な点はコメントで補足します。

id:ohtsu6

出来ました。

どうもありがとうございます。

2009/04/25 10:28:38

その他の回答4件)

id:sale-shopping No.1

回答回数13ベストアンサー獲得回数0

(はてなにより削除しました)

id:Marine-Blue No.2

回答回数238ベストアンサー獲得回数12

ポイント10pt

前置き。1番目の回答者やそれと同じ回答をしているユーザーは片っ端から拒否リストに入れておくと良いですよ。


本題。こんなのどうでしょうか。結構手軽で、処理もかなり速かったです。

http://dhive.jp/dhappli/grepreplace.html

id:ohtsu6

どうもありがとうございます。

2009/04/25 10:24:53
id:takanii No.3

回答回数28ベストアンサー獲得回数1

ポイント10pt

uwscというソフトでマクロを作成するとかしないといけないと思います。http://www.uwsc.info/

id:ohtsu6

どうもありがとうございます。

2009/04/25 10:24:55
id:rouge_2008 No.4

回答回数595ベストアンサー獲得回数351

ポイント200pt

正規表現を使用できる置換ソフトを使用してはいかがでしょうか?

※正規表現で最短マッチができれば、どのソフトでも可能だと思います。

「Repl-Ace on .NET」では以下の正規表現で可能でした。

http://www.forest.impress.co.jp/lib/sys/file/filesearch/repl_ace...

検索文字列:((?:.*?</div>){13})

置換文字列:$1挿入する広告タグを記述

※「正規表現を使う」「改行(\n)を文字とみなす」にチェックを入れる

※事前に、Step2で検索した対象ファイルの一覧の文字セットを確認してください。

(文字コードを正常に認識できない場合がありますので、Step1で「文字セットを~」のチェックを外して検索を実行した方が良さそうです。

※この場合は、Step2で「他の機能」→「デフォルトの文字セット」および「デフォルトの改行文字」を対象ファイルに合わせて指定して置いてください。)

※文字コードが他のファイルと異なる場合は、一覧のファイルを右クリックで選択してファイルのみ変更できます。


その他、分からない事がある場合はコメントでフォローしますので、出来れば開けて置いてください。

id:ohtsu6

出来ました。

どうもありがとうございます。

ただ、< /div>が13個無いファイルの処理に

時間がかかるようでした。

2009/04/25 10:26:59
id:Mook No.5

回答回数1314ベストアンサー獲得回数393ここでベストアンサー

ポイント800pt

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

修正・保存したファイルを実行(ダブルクリック)でご希望の処理が実行されないでしょうか。

http://www.whitire.com/vbs/


不明な点はコメントで補足します。

id:ohtsu6

出来ました。

どうもありがとうございます。

2009/04/25 10:28:38

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

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

トラックバック

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

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

回答リクエストを送信したユーザーはいません