HTML durchsuchen und text einfügen

Adam Frank

Grünschnabel
Hallo Zusammen

Ich habe für mein Problem leider keine passende Lösung im Forum gefunden.

Ich habe in mehreren Ordnern .html dateien. ca. 50 Stück
Mit einem Makro möchte ich

1) ein Ordner auswählen können
2) und in diesem Ordner sämtliche .html dateien durchsuchen
3) falls in einer der Dateien der Begriff </Table> mehr als 3 mal vorkommt,
4) soll das Makro nach dem 3. </Tabel> bis auf das vor letzte die folgende Zeile einfügen
"<h3 style="page-break-before:always"></h3>"

Die .html dateien haben ca. 3 bis 20 Tabellen

Bsp. Html Datei:

<HTML>
<HEAD>
.......
</HEAD>

<TABLE >
</TABLE>
-----> Hier nicht

<TABLE >
</TABLE>
-----> Hier nicht

<TABLE >
</TABLE>
-----> Ab Hier <h3 style="page-break-before:always"></h3>

<TABLE >
</TABLE>
-----> Hier <h3 style="page-break-before:always"></h3>


<TABLE >
</TABLE>
-----> und Hier <h3 style="page-break-before:always></h3>

<TABLE >
</TABLE>
-----> Hier nicht

</BODY>
</HTML>

Für jede Hilfe bin ich Dankbar!

mfg Adam
 
Also, zum Thema einlesen einer Datei gibts schon Millionen (;-)) Threads hier, am besten, du liest die ganze Datei auf einmal binär ein.

Das Suchen in Texten geht über InStr(), wobei du auch eine Startposition vorgeben kannst, ab der gesucht wird. Du suchst am besten in einer Schleife und zählst einen Zähler hoch, nach dem dritten gefundenen (und allen weiteren) fügst du dann halt deinen Text ein.

Ein anderer Ansatz wäre die Benutzung von Split(), damit kannst du die HTML-Datei an den <Table>-Tags splitten. Du fügst dann einfach ab dem 4 Element deinen Text ein, wenn du alle hast baust du die Datei mit Join() wieder zusammen und speicherst ab.


Der Doc!
 
War mal so frei und hab kurz eine Split()-Lösung gebastelt, ich mach das mit einer Textbox statt dem Datei-Einlesen:
Visual Basic:
 'Dimensionierung
 Dim sText$, sParts$(), sInsert$
 'Ich lege hier mal den einzufügenden Text fest
 sInsert = vbNewLine & "<h3 style=""page-break-before:always""></h3>"
 'Mein Beispiel läuft mit einer Textbox
 sText = Text1.Text
 'Teile den Text an den "</TABLE>"-Tags
 sParts = Split(sText, "</TABLE>", , vbTextCompare)
 'Jetzt gehe vom 3 bis zum vorletzten Element
 For cnt = 3 To UBound(sParts) - 1
  'und füge den einzufügenden Text vorher ein
  sParts(cnt) = sInsert & sParts(cnt)
 Next cnt
 'Nun die geteilten Elemente wieder verbinden
 sText = Join(sParts, "</TABLE>")
 'und ausgeben
 Text1.Text = sText


Der Doc!
 
Zurück