zappdidappdi

Text zwischen zwei Zeichenketten ausgeben

Hallo liebe Leute,

ich habe derzeitig mir zur Aufgabe gemacht aus einer HTML Seite, die ich per wget runterlade, einen bestimmten Bereich auszulesen.
Dieser Bereich wird durch zwei Wörter Abgegrenzt die sich nicht verändern, der Bereich dazwischen jedoch schon.

Beispiel:
<p><strong>Obst</strong></p>Apfel,Birne,Erdbeere<p><strong>Gemüse</strong></p>Apfel, Melone, Gurke, Salat

Ich möchte nun alles in eine neue txt Datei bekommen, was zwischen Obst und Gemüse liegt, wenn es ein paar Zeichen mehr oder weniger sind ist das nicht so schlimm, hauptsache "Apfel,Birne,Erdbeere" sind vollkommen erhalten.

Das ganze würde ich gerne mit einer Batch Datei verwirklichen. Natürlich habe ich schon vorher gesucht und geschaut ob ich es selber hinkriege und bin auf Teile wie "for /F" gekommen, habe aber nicht so wirklich begriffen, wie das verwendet wird.

Ich hoffe ihr könnt mir helfen

Mit freundlichen Grüßen

Zappdidappdi
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 188242

Url: https://administrator.de/forum/text-zwischen-zwei-zeichenketten-ausgeben-188242.html

Ausgedruckt am: 17.05.2025 um 23:05 Uhr

TsukiSan
TsukiSan 19.07.2012 um 07:00:45 Uhr
Goto Top
Hallo Zappdidappdi,

also in Batch kann ich dir keine Lösung bieten, aber in VBS mal was zum Ausprobieren.

Dim SuchAnfang, SuchEnde

URLPfad = "http://de.wetter.yahoo.com/"  

SuchAnfang = Chr(34) & "day-temp-current temp-c " & Chr(34) & ">"  
SuchEnde = "&"  

Set Http=CreateObject("WinHttp.WinHttpRequest.5.1")  

Http.Open "GET",URLPfad,False  
Http.Send

temp = split(Http.ResponseText,SuchAnfang)
temp1 = split(temp(1),SuchEnde)
temp2 = temp1(0) & "°C"  

Wscript.Echo  temp2

Gruss
Tsuki
76109
76109 19.07.2012 aktualisiert um 09:13:28 Uhr
Goto Top
Hallo Tsuki!

Bei Html-Text empfehle ich der Einfachheit halber RegExp zu verwenden.

Mit dem Obst/Gemüsebeispiel das Ganze dann in etwa so:
Option Explicit

Const sURL = "http://www.ObstUndGemuese.de"  
Const sTxtFile = "C:\Test.txt"  

Dim oFso, oFile, oRE, oMatch, oSubMatch, sText
    
On Error Resume Next
    
With CreateObject("WinHttp.WinHttpRequest.5.1")  
   .Open "get", sURL, False  
   .send
   sText = .responseText
End With
       
If Err Then
    WScript.Echo "Webseite nicht verfügbar!":  WScript.Quit 1  
End If
    
On Error GoTo 0

Set oRE = New RegExp
Set oFso = CreateObject("Scripting.FileSystemObject")  

Set oFile = oFso.CreateTextFile(sTxtFile)

With oRE
    .Global = True
    .IgnoreCase = True
    .Pattern = "obst.*p>(.*)<p"  
End With
    
For Each oMatch In oRE.Execute(sText)
    For Each oSubMatch In oMatch.SubMatches
        oFile.WriteLine oSubMatch
    Next
Next

oFile.Close

Gruß Dieter
TsukiSan
TsukiSan 19.07.2012 um 09:15:56 Uhr
Goto Top
Hallo Dieter,

das ist natürlich schöneres Obst/Gemüse, als meines face-wink

Aber wir wissen ja noch nicht, ob der TO es mit VBS machen möchte.

Trotzdem Danke an dich!

Gruss
Tsuki
76109
76109 19.07.2012 aktualisiert um 09:43:09 Uhr
Goto Top
Hallo Tsuki!

Naja, um's verschönern gings mir eigentlich weniger, aber wenn Du es sagstface-wink

Aber wir wissen ja noch nicht, ob der TO es mit VBS machen möchte.
Vielleicht liefert bastla auch noch eine Batchlösung, wobei ich denke, dass auch er bei Html-Text eine RegExp-Variante einer Batch-Variante vorziehen würde?

Gruß Dieter
bastla
bastla 19.07.2012 aktualisiert um 12:29:54 Uhr
Goto Top
[OT]
@Dieter
dass auch er bei Html-Text eine RegExp-Variante einer Batch-Variante vorziehen würde
So isses ... face-wink

Grüße
bastla
[/OT]
76109
76109 19.07.2012 aktualisiert um 12:37:05 Uhr
Goto Top
[OT]
Hallo bastla!

So isses ...
War mir nur zu 99,9% sicherface-wink

Gruß Dieter
[/OT]
bastla
bastla 19.07.2012 aktualisiert um 12:29:37 Uhr
Goto Top
[OT]
Hallo Dieter!
nur zu 99,9%
Da bin ich ja beruhigt, dass ich nicht sooo berechenbar bin ... face-wink

Grüße
bastla
[/OT]
Zappdidappdi
Zappdidappdi 19.07.2012 um 12:44:30 Uhr
Goto Top
So,schon mal vielen vielen Dank für eure wunderbare Hilfe.
Ich habe jetzt das VBS Script übernommen und angeguckt. Wenn ich das richtig verstehe ist folgende Zeile dafür zuständig....

Zitat von @76109:
With oRE
.Global = True
.IgnoreCase = True
.Pattern = "obst.*p>(.*)<p"

... was aus unserer Internetseite ausgeschnitten wird.Leider ist das Beispiel, das ich gegeben habe, sehr vereinfacht, es komme noch mehrere <strong> und <p> drin vor bis ich zum ersehnten "Gemüse" komme.
Wäre es möglich das Gemüse als endpunkt zu nehmen?


Des weiteren hätte ich da noch eine weitere Frage (tut mir leid, dass ich euch so viel beschäftige face-smile )
Kann man auch als eingrenzung sagen, dass er nur in der Zeile in der "<strong>Obst" steht das ganze machen soll? Nur als Absicherung falls die Seite noch mehr Obst oder Gemüse auf der Seite stehen hat, dass ich nicht möchte...

Vielen Dank für eure Hilfe face-smile
76109
76109 19.07.2012 aktualisiert um 13:23:31 Uhr
Goto Top
Hallo Zappdidappdi!

Könnte so gehen:
.Pattern = "\n.*obst.*gemüse.*p>(.*)<.*\r"

Gruß Dieter
Zappdidappdi
Zappdidappdi 19.07.2012 um 14:03:38 Uhr
Goto Top
Zitat von @76109:
Hallo Zappdidappdi!

Könnte so gehen:
.Pattern = "\n.*obst.*gemüse.*p>(.*)<.*\r"

Gruß Dieter

Super, funktioniert einwandfrei!
Danke für eure Hilfe!

Bis zum nächsten Problem face-smile