あるフォルダのすべてのテキストファイルを1つずつ順番に読み込んで、一定範囲の行を削除したあと、別のフォルダに出力するプログラム例です。実際には、”削除”するのではなく”出力しない”ことで削除された状態にします。
次のコードでは、
- 「C:\テスト」フォルダ内にあるすべての「.html」ファイルを読み込みます。
- 一部削除後のファイルは「C:\テスト\NewFile」フォルダに同名ファイルとして出力します。
- テキストファイルを1行ずつ読み込んでいき、「<div id="footer">」が出てきたら削除フラグをONにします。
- 削除フラグがONの状態で、「</div>」が出てきたら削除フラグをOFFにします。
- 削除フラグの状態を目安にして、OFFの場合だけ出力するようにします。ONの間は出力されないので、結果的にその範囲は削除された形になります。
プログラム例:
Sub TextFileSample2()
Dim strFileName As String
Dim intFilenum1 As Integer, intFilenum2 As Integer
Dim strData As String
Dim blnDelFlg As Boolean
Const cstrSrc = "C:\テスト\"
Const cstrDst = "C:\テスト\NewFile\"
'C:\テストフォルダ内の最初の.htmlファイルを読み込む
strFileName = Dir(cstrSrc & "*.html")
'フォルダ内のすべての.htmlファイルを読み込むループ
Do While strFileName <> ""
'入力元と出力先のファイルを開く
intFilenum1 = FreeFile()
Open cstrSrc & strFileName For Input As #intFilenum1
intFilenum2 = FreeFile()
Open cstrDst & strFileName For Output As #intFilenum2
'入力元ファイルからすべての行を読み込むループ
Do Until EOF(intFilenum1)
Line Input #intFilenum1, strData
'「<div id="footer">」が出てきたら削除フラグをON
If InStr(strData, "<div id=""footer"">") > 0 Then
blnDelFlg = True
End If
'削除フラグがOFFなら出力先に1行書き込み
' ※フラグがONの間は出力しないことで削除した形にする
If Not blnDelFlg Then
Print #intFilenum2, strData
End If
'削除フラグがONで「</div>」が出てきたら削除フラグをOFF
If blnDelFlg And InStr(strData, "</div>") > 0 Then
blnDelFlg = False
End If
Loop
'入力元と出力先のファイルを閉じる
Close #intFilenum1: Close #intFilenum2
'次のファイルへ進む
strFileName = Dir()
Loop
MsgBox "処理完了!", vbOKOnly + vbInformation
End Sub
実行例:
■C:\テストのファイル



■C:\テスト\NewFileのファイル

 |