Zerteilen eines Strings anhand von Markern im Text

ThLey

Grünschnabel
Hallo Leuts',

bin neuling in VBS.

ich bitte um Hilfe bei folgendem Problem:

Es wird eine HTML Datei eingelesen. Diese Datei wird durchsucht nach einem im HTML Code eingebauten Marker "<!-- <Ich bin ein Marker> -->". Die Funktion InStr() liefert mir den Startpunkt in der gesamten Zeichenkette.

So weit funktioniert das Skript. Jedoch möchte ich nur den Textbereich bis zum Schließenden Tag <!-- </Ich bin ein Marker> --> in ein Array speichern.

In meiner IF THEN Schleife erhalte ich den Start und Endpunkt des gesuchten Textbereichs. Jedoch gibt es den Marker mehrmals in dem eingelesenen String, so dass hier eine weitere Schleife die einzelnen gesuchten "Textbereiche" in das Array schreiben müsste.

Es soll eine neue Ausgabedatei erzeugt, die genau die gesuchten Textbereiche enthält.

Kurz: Wer kann mir zeigen, wie ich einen String in genau die gesuchten Textbereiche Splitte?

Code:
'Mit Option Explicit ist festgelegt, das nur Variable im Skript benutzt werden, die mit DIM-Anweisungen deklariert sind.
Option Explicit

'Deklaration der Variablen***************************************************
Dim WSHShell, objFSO, objNetwork, WorkingFolder, Konfiguration, Title
Dim f, ScriptOrdner, Frage
Dim FileMonitor, FilePub
Dim Zeile
Dim FileIn, FileZ, FileOut 
Dim Wochenplan_1, Wochenplan_2
Dim Datei, FileString, Txt, i, arrSort, arrTest(), oArgs

'Einzufügende Zeile

Zeile1 = "<table border=""0"" width=""100%""><colgroup><col width=""50%""><col width=""50%""></colgroup><tr><td>"

'Erzeugen von Objektreferenzen************************************************

Set WSHShell   = WScript.CreateObject("WScript.Shell")
Set objFSO     = WScript.CreateObject("Scripting.FileSystemObject")
Set objNetwork = WScript.CreateObject("WScript.Network")

'Variable *TEST****************************************************************  
  Title = objFSO.GetBaseName(WScript.ScriptName)
  MsgBox "Script Name "+ Title
  ' WorkingFolder ermitteln --- hier befindet sich das Script
  Set f = objFSO.GetFile(WScript.ScriptFullName)  
  ScriptOrdner = f.ParentFolder
   MsgBox "Script Ordner "+ ScriptOrdner 
'******************************************************************************

'Festlegen des Ausgabe Dateinamens
FileMonitor = "Monitor_2.html"
'Festlegen der Einzulesenden Dateinamen
FilePub = "ausgabe.html"
'******************************************************************************

'Prüfen ob Datei vorhanden*****************************************************
If objFSO.FileExists(FilePub) Then
	'Ja, Datei zum Lesen öffnen
		' Wert 1= Datei wird zum lesen geöffnet
		' Wert 2= Datei wird zum schreiben geöffnet
		' Wert 8= Datei wird zum Anhängen von Text geöffnet
		Set FileIn = objFSO.OpenTextFile("C:\Monitor\" + FilePub, 1, False) 
		
		'Datei auslesen. Text String wird zurückgeliefert
		' ReadAll() liest die komplette Textdatei
		' ReadLine() liest eine Zeile
		' Read(AnzahlZeichen)
		FileString = FileIn.ReadAll()
		FileIn.close()
		
		'TEST Inhalt ausgeben
		WScript.Echo FileString
Else
		WScript.Echo "Datei" & FilePub()&" nicht gefunden!"
End If

'Nach <!-- </Ich bin ein Marker> --> suchen
' InStr() liefert die genaue Strartposition des gesuchten Zeichen, Wortrs zurück
' InStr(Startposition, Zeichenkette, SuchText, Vergleichsart)
' Startposition: gibt a, ab welchem Zeichen der String durchsucht werden soll
' Zeichenkette: der zu durchsuchende Sting
' SuchText: gesuchtes Wort, Zeichen
' Vergleichsart: Mittels konst. vbTextCompare: Kein unterschied in Groß/klein. 	vbBinaryCompare
' Wert = 0 Wort nicht vorhanden


Wochenplan_1 = InStr( 1,FileString,"<!-- <Ich bin ein Marker> -->",1)
If Wochenplan_1 > 0 Then
		Wochenplan_2 = InStr( Wochenplan_1,FileString,"<!-- </Wochenplan> -->",1)
	  'In Array zwischenspeichern
		 FileZ = Split(FileString, ")
	' ****Test****
	WScript.Echo Wochenplan_1
	WScript.Echo Wochenplan_2
	WScript.Echo (FileZ(0))
	WScript.Echo (FileZ(1))
	WScript.Echo (FileZ(2))

Else
 MsgBox "Nicht gefunden"
End If




'Erzeugen der Ausgabe Datei. 
' true/false = erlaubt das überschreiben einer vorhandenen Datei 
Set FileOut = objFSO.CreateTextFile("C:\Monitor\" + FileMonitor, true)
FileOut.WriteLine("Test")
FileOut.Close

WScript.Quit
 
Ich hab jetzt nicht so die VBS-Erfahrung, aber geht dort nicht auch der Befehl Split()?
Visual Basic:
Texte = Split(FileString, "<!-- <Ich bin ein Marker> -->")
Du kriegst dann ein Array zurückgeliefert (ohne den Trennstring) in dem die einzelnen Teile stehen. Ist VB6-Code, sollte aber in VBS auch funktionieren.


Der Doc!
 
Danke für die AAntwort.

Das ist mir schon klar. Mein Problem ist viel mehr, dass ich ein HTML Dokument habe, in dem x-mal der Tag "<!-- <Ich bin ein Marker> -->" vorkommen kann, gefolgt von dem Code den ich "heraustrennen" möchte und dem schließenden Tag "<!-- </Ich bin ein Marker> -->"

Wie stelle ich es am, den HTML Code so zu Spliten, dass ich diesen in einem Array stehen habe, so dass ich dann mit Join() in die gewünschte Form bringen kann?

Die HTML sieht in etwa so aus:
Code:
</style></head><body>
<!-- <Ich bin ein Marker> -->
<div class=
..........
......
</div>>
<!-- </Ich bin ein Marker> -->
</td></tr>
</tbody></table>
<!-- <Ich bin ein Marker> -->
<div> ..........</div>
<!-- </Ich bin ein Marker> -->
<div>
......
.....
</div>
</tbody></table>
......
......
 
Zuletzt bearbeitet:
Ich steh momentan ein bisschen auf der Leitung, poste doch mal eine HTML-Datei so wie sie einzulesen ist und eine Textdatei, so wie sie am Schluss aussehen soll (am besten beide in einem Zip-File).


Der Doc!
 
Zurück