TXT von unten nach oben durchsuchen mit vbscript
Ich würde gerne eine TXT von unten durchsuchen
Hallo,
ich würde gerne eine TXT von unten durchsuchen und auch nur das letzte Ergebnis anzeigen wollen.
Wie man eine TXT durchsuchen kann weiß ich, aber wie geht das von unten nach oben? Hat da jemand eine Idee?
Beispiel:
search string= hallo (dann soll er mir nicht das erste hallo ausgeben sondern das letzte.
Gruß,
m0nstar
Hallo,
ich würde gerne eine TXT von unten durchsuchen und auch nur das letzte Ergebnis anzeigen wollen.
Wie man eine TXT durchsuchen kann weiß ich, aber wie geht das von unten nach oben? Hat da jemand eine Idee?
Beispiel:
hallo
hallo2
hallo3
hallo2
hallo
hallo4
Gruß,
m0nstar
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146229
Url: https://administrator.de/contentid/146229
Ausgedruckt am: 26.11.2024 um 03:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo m0nstar,
falls es sich nicht um sehr große Dateien handelt, man das rückwärts Suchen keinen Sinn; so wie dein Beispiel auch keinen macht.
Ein Infomationsgewinn könnte ja hier höchstens darin bestehen, zu wissen in welcher Zeile (von Hinten) der Suchbegriff steht.
Ansonsten von vorne durchlaufen und nur den letzten gefundenen merken.
Gruß
LotPings
falls es sich nicht um sehr große Dateien handelt, man das rückwärts Suchen keinen Sinn; so wie dein Beispiel auch keinen macht.
Ein Infomationsgewinn könnte ja hier höchstens darin bestehen, zu wissen in welcher Zeile (von Hinten) der Suchbegriff steht.
Ansonsten von vorne durchlaufen und nur den letzten gefundenen merken.
Gruß
LotPings
Hallo m0nstar,
wir hatten doch bei unserem letzten Beitrag
schon mal die Geschichte mit den Arrays und dem Split gehabt.
So ähnlich kannst du auch direkt auf die letzte Zeile einer Datei zugreifen.
(VBS)
1) Datei komplett öffnen (ReadAll) und die Daten splitten mit "vbcrlf"
2) dann steht im höchsten Wert des Arrays (Ubound) die letzte Zeile drinnen.
3) auf diese kannst du dann direkt zugreifen.
Kurzes Beipiel:
Gruss Tsuki
wir hatten doch bei unserem letzten Beitrag
schon mal die Geschichte mit den Arrays und dem Split gehabt.
So ähnlich kannst du auch direkt auf die letzte Zeile einer Datei zugreifen.
(VBS)
1) Datei komplett öffnen (ReadAll) und die Daten splitten mit "vbcrlf"
2) dann steht im höchsten Wert des Arrays (Ubound) die letzte Zeile drinnen.
3) auf diese kannst du dann direkt zugreifen.
Kurzes Beipiel:
MeineIniDatei = "C:\TestDatei.txt"
Set FSO = CreateObject("Scripting.FileSystemObject")
Meinedaten = FSO.OpenTextFile(MeineIniDatei, 1).ReadAll
AlleZeilen = Split(Meinedaten, vbCrLF)
Msgbox AlleZeilen(Ubound(AlleZeilen))
Gruss Tsuki
Hallo m0nstar!
Nur der Vollständigkeit halber:
Einschränkung dieser Variante: Falls der Suchbegriff nicht am Anfang der Zeile steht, wird nur der Teil der Zeile ab dem letzten Auftreten des Suchbegriffes ausgegeben.
Alternative (entspricht im Prinzip LotPings Vorschlag, wobei allerdings nur "passende" Zeilen durchlaufen werden müssen):
Grüße
bastla
Nur der Vollständigkeit halber:
Datei = "D:\Dein Text.txt"
Suche = "hallo"
Set fso = CreateObject("Scripting.FileSystemObject")
T = fso.OpenTextFile(Datei).ReadAll
'Zeichenposition des Suchtextes feststellen (bzw 0, wenn nicht gefunden)
P = InStrRev(T, Suche)
'gesamten Dateiinhalt an der gesuchten Position "schneiden",
'anhand der Zeilenschaltungen zerlegen und
' den ersten entstehenden Teilstring ausgeben
If P > 0 Then WScript.Echo Split(Mid(T, P), vbCrLf)(0)
Alternative (entspricht im Prinzip LotPings Vorschlag, wobei allerdings nur "passende" Zeilen durchlaufen werden müssen):
Datei = "D:\Dein Text.txt"
Suche = "hallo"
Set fso = CreateObject("Scripting.FileSystemObject")
T = fso.OpenTextFile(Datei).ReadAll
Set rE = New RegExp
'Suchmuster festlegen, bestehend aus:
' Dateianfang "^" oder "|" Zeilenende der vorigen Zeile "\r\n"
' keinem oder mehreren beliebigen Zeichen ".*"
' dem eigentlichen Suchbegriff
' keinem oder mehreren weiteren beliebigen Zeichen ".*" und
' Zeilenende "\r\n" oder "|" Dateiende "$"
rE.Pattern = "(^|\r\n).*" & Suche & ".*(\r\n|$)"
rE.IgnoreCase = True
rE.Global = True
'Auflistung aller Fundstellen erzeugen, ...
Set Matches = rE.Execute(T)
'... durchlaufen, ...
For Each Match In Matches
'... sich jeweils die bisher letzte Fundstelle "merken" ...
Last = Match.Value
Next
'... und die allerletzte Fundstelle ausgeben
WScript.Echo Last
bastla
Hallo m0nstar!
Wenn ich Dein Beispiel unmittelbar umsetzen müsste, sähe das so aus:
Hier wird nach einer oder mehreren Ziffern, einem "=" und dem Suchbegriff lt Variable "Search" gesucht (ev Leerzeichen - Du schreibst zwar von 3 Zeichen, inkl Leerzeichen wären es allerdings 5 - musst Du noch an passender Stelle ergänzen) ...
Soferne nach mehreren Kriterien gesucht, aber nur ein Teil des Suchergebnisses reoturniert werden soll, können "
Zusätzlich müsste aus
dann
werden. Da die Kennzeichnung der "
Grüße
bastla
Wenn ich Dein Beispiel unmittelbar umsetzen müsste, sähe das so aus:
Search = "Pending downloads"
rE.Pattern = "\d+=" & Search
Soferne nach mehreren Kriterien gesucht, aber nur ein Teil des Suchergebnisses reoturniert werden soll, können "
SubMatches
" verwendet werden - soferne ich Dich richtig interpretiere, müsste das mit dem ursprünglichen "Pattern" so zu lösen sein:rE.Pattern = "(^|\r\n).*" & SearchPart2 & ".*" & "(\d+=" & SearchPart1 & ")"
Last = Match.Value
Last = Match.SubMatches(1)
SubMatches
" durch ein Paar runder Klammern erfolgt, liefert "Match.SubMatches(0)
" wegen des Teil-Patterns "(^|\r\n)
" den "Textanfang" bzw das vorhergehende "Zeilenende" - daher ist der Index "1" (= zweites Klammernpaar) zu verwenden.Grüße
bastla
Hallo m0nstar!
Ich bin mir nicht so ganz sicher, wie das gemeint ist und was gefunden werden soll - aber schematisch könnte das so aussehen:
Der Variablen R wird so der letzte Teil des gesamten Dateiinhaltes T (ab der Fundstelle des letzten "test123") zugewiesen - für Dein Beispiel oben wäre das dann:
Grüße
bastla
Ich bin mir nicht so ganz sicher, wie das gemeint ist und was gefunden werden soll - aber schematisch könnte das so aussehen:
P = InStrRev(T, "test123")
If P > 0 Then
R = Mid(T, P)
'jetzt in R suchen und Ergebnis(se) weiter verarbeiten
End If
test123
test876
test345
test34
bastla