gelöst 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
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:
01.
hallo
02.
hallo2
03.
hallo3
04.
hallo2
05.
hallo
06.
hallo4
Gruß,
m0nstar
13 Antworten
- LÖSUNG LotPings schreibt am 05.07.2010 um 12:26:10 Uhr
- LÖSUNG bastla schreibt am 05.07.2010 um 12:26:25 Uhr
- LÖSUNG m0nstar schreibt am 05.07.2010 um 12:33:40 Uhr
- LÖSUNG TsukiSan schreibt am 06.07.2010 um 04:47:44 Uhr
- LÖSUNG m0nstar schreibt am 06.07.2010 um 07:29:31 Uhr
- LÖSUNG bastla schreibt am 06.07.2010 um 09:29:34 Uhr
- LÖSUNG m0nstar schreibt am 06.07.2010 um 09:52:05 Uhr
- LÖSUNG m0nstar schreibt am 07.07.2010 um 11:48:49 Uhr
- LÖSUNG bastla schreibt am 07.07.2010 um 12:34:31 Uhr
- LÖSUNG m0nstar schreibt am 08.07.2010 um 09:24:35 Uhr
- LÖSUNG bastla schreibt am 08.07.2010 um 09:36:25 Uhr
- LÖSUNG m0nstar schreibt am 13.07.2010 um 15:04:20 Uhr
- LÖSUNG bastla schreibt am 17.07.2010 um 20:47:58 Uhr
- LÖSUNG m0nstar schreibt am 13.07.2010 um 15:04:20 Uhr
- LÖSUNG bastla schreibt am 08.07.2010 um 09:36:25 Uhr
- LÖSUNG m0nstar schreibt am 08.07.2010 um 09:24:35 Uhr
- LÖSUNG bastla schreibt am 07.07.2010 um 12:34:31 Uhr
- LÖSUNG m0nstar schreibt am 07.07.2010 um 11:48:49 Uhr
- LÖSUNG m0nstar schreibt am 06.07.2010 um 09:52:05 Uhr
- LÖSUNG TsukiSan schreibt am 06.07.2010 um 04:47:44 Uhr
- LÖSUNG m0nstar schreibt am 05.07.2010 um 12:33:40 Uhr
LÖSUNG 05.07.2010 um 12:26 Uhr
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
LÖSUNG 05.07.2010 um 12:26 Uhr
Hallo m0nstar!
Sieh Dir "InStrRev()" an ...
Grüße
bastla
Sieh Dir "InStrRev()" an ...
Grüße
bastla
LÖSUNG 05.07.2010 um 12:33 Uhr
Hallo ihr beiden,
es handelt sich um große Dateien (20-30 mb groß), wo es öfters mal vorkommt das der eintrag doppelt vorkommt und dazu will ich nur das letzte ergebnis auslesen lassen...oben war ja nur ein Besipiel @ LotPings^^
@ Bastla: ich schau mal was ich unter dem begriff finden kann danke
Gruß,
m0nstar
es handelt sich um große Dateien (20-30 mb groß), wo es öfters mal vorkommt das der eintrag doppelt vorkommt und dazu will ich nur das letzte ergebnis auslesen lassen...oben war ja nur ein Besipiel @ LotPings^^
@ Bastla: ich schau mal was ich unter dem begriff finden kann danke
Gruß,
m0nstar
LÖSUNG 06.07.2010, aktualisiert 18.10.2012
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:
01.
MeineIniDatei = "C:\TestDatei.txt"
02.
03.
Set FSO = CreateObject("Scripting.FileSystemObject")
04.
Meinedaten = FSO.OpenTextFile(MeineIniDatei, 1).ReadAll
05.
06.
AlleZeilen = Split(Meinedaten, vbCrLF)
07.
08.
Msgbox AlleZeilen(Ubound(AlleZeilen))
LÖSUNG 06.07.2010 um 07:29 Uhr
Hallo Tsuki,
danke dir für dein klasse Beispiel...so hab selbst ich es verstanden^^.
Ich weiß das wir drüber geredet haben aber ich war mir unsicher ob man es hier wieder anwenden kann. Vorallem das mit dem Split war mir vorher so garnicht in den Sinn gekommen.
Danke dir.
Gruß,
m0nstar
danke dir für dein klasse Beispiel...so hab selbst ich es verstanden^^.
Ich weiß das wir drüber geredet haben aber ich war mir unsicher ob man es hier wieder anwenden kann. Vorallem das mit dem Split war mir vorher so garnicht in den Sinn gekommen.
Danke dir.
Gruß,
m0nstar
LÖSUNG 06.07.2010 um 09:29 Uhr
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:
01.
Datei = "D:\Dein Text.txt"
02.
Suche = "hallo"
03.
04.
Set fso = CreateObject("Scripting.FileSystemObject")
05.
T = fso.OpenTextFile(Datei).ReadAll
06.
'Zeichenposition des Suchtextes feststellen (bzw 0, wenn nicht gefunden)
07.
P = InStrRev(T, Suche)
08.
'gesamten Dateiinhalt an der gesuchten Position "schneiden",
09.
'anhand der Zeilenschaltungen zerlegen und
10.
' den ersten entstehenden Teilstring ausgeben
11.
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):
01.
Datei = "D:\Dein Text.txt"
02.
Suche = "hallo"
03.
04.
Set fso = CreateObject("Scripting.FileSystemObject")
05.
T = fso.OpenTextFile(Datei).ReadAll
06.
Set rE = New RegExp
07.
'Suchmuster festlegen, bestehend aus:
08.
' Dateianfang "^" oder "|" Zeilenende der vorigen Zeile "\r\n"
09.
' keinem oder mehreren beliebigen Zeichen ".*"
10.
' dem eigentlichen Suchbegriff
11.
' keinem oder mehreren weiteren beliebigen Zeichen ".*" und
12.
' Zeilenende "\r\n" oder "|" Dateiende "$"
13.
rE.Pattern = "(^|\r\n).*" & Suche & ".*(\r\n|$)"
14.
rE.IgnoreCase = True
15.
rE.Global = True
16.
'Auflistung aller Fundstellen erzeugen, ...
17.
Set Matches = rE.Execute(T)
18.
'... durchlaufen, ...
19.
For Each Match In Matches
20.
'... sich jeweils die bisher letzte Fundstelle "merken" ...
21.
Last = Match.Value
22.
Next
23.
'... und die allerletzte Fundstelle ausgeben
24.
WScript.Echo Last
bastla
LÖSUNG 06.07.2010 um 09:52 Uhr
Hallo bastla,
ui danke...das natürlich fein um mal gute alternativen zu sehen bzw. wege wie es noch geht.
Danke, werd mich da gleich mal durchfressen.
Gruß,
m0nstar
ui danke...das natürlich fein um mal gute alternativen zu sehen bzw. wege wie es noch geht.
Danke, werd mich da gleich mal durchfressen.
Gruß,
m0nstar
LÖSUNG 07.07.2010 um 11:48 Uhr
Hallo,
habe da doch nochmal eine Frage, wenn ich nach 2 Sachen suche:
Das klappt soweit super, Problem ist nur ich will in der msgbox aber nicht den kompletten Teil ausgeben, sondern nur diesen Bereich:
Problem ist noch, dass vor dem Suchbegriff 3 Zeichen sind die ich mit ausgeben will.
Und nach Pending downloads suche ich.
Ich hoffe man versteht was ich will
Gruß,
m0nstar
habe da doch nochmal eine Frage, wenn ich nach 2 Sachen suche:
01.
rE.Pattern = "(^|\r\n).*" & SearchPart2 & ".*" & SearchPart1 & ".*(\r\n|$)"
01.
"(^|\r\n).*" & SearchPart1 & ".*(\r\n|$)"
01.
15 = Pending downloads
Ich hoffe man versteht was ich will
Gruß,
m0nstar
LÖSUNG 07.07.2010 um 12:34 Uhr
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 "SubMatches" verwendet werden - soferne ich Dich richtig interpretiere, müsste das mit dem ursprünglichen "Pattern" so zu lösen sein:
Zusätzlich müsste aus
dann
werden. Da die Kennzeichnung der "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
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
01.
Last = Match.SubMatches(1)
Grüße
bastla
LÖSUNG 08.07.2010 um 09:24 Uhr
Hallo bastla,
danke mit deinen Erklärungen hilft mir das extrem weiter VBScript besser zu lernen. Vielen vielen Dank, großes Lob an dieser Stelle, auch das du mir immer hilfst wenn ich dich mal nerve
Gruß,
m0nstar
danke mit deinen Erklärungen hilft mir das extrem weiter VBScript besser zu lernen. Vielen vielen Dank, großes Lob an dieser Stelle, auch das du mir immer hilfst wenn ich dich mal nerve
Gruß,
m0nstar
LÖSUNG 08.07.2010 um 09:36 Uhr
Hallo m0nstar!
Wie - Du nervst mich? War mir bisher gar nicht aufgefallen ...
Freut mich jedenfalls, wenn meine Vorschläge helfen.
Grüße
bastka
Wie - Du nervst mich? War mir bisher gar nicht aufgefallen ...
Freut mich jedenfalls, wenn meine Vorschläge helfen.
Grüße
bastka
LÖSUNG 13.07.2010 um 15:04 Uhr
Hallo,
eine Frage hab ich doch noch
wie stell ich es den an, wenn ich eine Zeile suche und paar Zeilen drunter noch etwas suchen will?
test123
test3
test76
test123
test876
test345
test34
Jetzt will ich nach dem letzten test123 suchen und test34...es soll abern icht nur das letzte test34 sein sondern das was nach test123 kommt ausgegeben werden.
Jemand ne Idee?
Gruß,
m0nstar
eine Frage hab ich doch noch
wie stell ich es den an, wenn ich eine Zeile suche und paar Zeilen drunter noch etwas suchen will?
test123
test3
test76
test123
test876
test345
test34
Jetzt will ich nach dem letzten test123 suchen und test34...es soll abern icht nur das letzte test34 sein sondern das was nach test123 kommt ausgegeben werden.
Jemand ne Idee?
Gruß,
m0nstar
LÖSUNG 17.07.2010 um 20:47 Uhr
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:
01.
P = InStrRev(T, "test123")
02.
If P > 0 Then
03.
R = Mid(T, P)
04.
'jetzt in R suchen und Ergebnis(se) weiter verarbeiten
05.
End If
test123
test876
test345
test34
bastla
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte