Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

TXT von unten nach oben durchsuchen mit vbscript

Frage Entwicklung VB for Applications

Mitglied: m0nstar

m0nstar (Level 1) - Jetzt verbinden

05.07.2010, aktualisiert 18.10.2012, 6402 Aufrufe, 13 Kommentare

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:
01.
hallo 
02.
hallo2 
03.
hallo3 
04.
hallo2 
05.
hallo 
06.
hallo4
search string= hallo (dann soll er mir nicht das erste hallo ausgeben sondern das letzte.

Gruß,
m0nstar
Mitglied: LotPings
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
Bitte warten ..
Mitglied: bastla
05.07.2010 um 12:26 Uhr
Hallo m0nstar!

Sieh Dir "InStrRev()" an ...

Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
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
Bitte warten ..
Mitglied: TsukiSan
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:
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))
Gruss Tsuki
Bitte warten ..
Mitglied: m0nstar
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
Bitte warten ..
Mitglied: bastla
06.07.2010 um 09:29 Uhr
Hallo m0nstar!

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)
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):
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
Grüße
bastla
Bitte warten ..
Mitglied: m0nstar
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
Bitte warten ..
Mitglied: m0nstar
07.07.2010 um 11:48 Uhr
Hallo,

habe da doch nochmal eine Frage, wenn ich nach 2 Sachen suche:

01.
rE.Pattern = "(^|\r\n).*" & SearchPart2 & ".*" & SearchPart1 & ".*(\r\n|$)"
Das klappt soweit super, Problem ist nur ich will in der msgbox aber nicht den kompletten Teil ausgeben, sondern nur diesen Bereich:

01.
"(^|\r\n).*" & SearchPart1 & ".*(\r\n|$)"
Problem ist noch, dass vor dem Suchbegriff 3 Zeichen sind die ich mit ausgeben will.

01.
15 = Pending downloads
Und nach Pending downloads suche ich.

Ich hoffe man versteht was ich will

Gruß,
m0nstar
Bitte warten ..
Mitglied: bastla
07.07.2010 um 12:34 Uhr
Hallo m0nstar!

Wenn ich Dein Beispiel unmittelbar umsetzen müsste, sähe das so aus:
Search = "Pending downloads" 
rE.Pattern = "\d+=" & Search
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:
rE.Pattern = "(^|\r\n).*" & SearchPart2 & ".*" & "(\d+=" & SearchPart1 &  ")"
Zusätzlich müsste aus
Last = Match.Value
dann
01.
Last = Match.SubMatches(1)
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
Bitte warten ..
Mitglied: m0nstar
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
Bitte warten ..
Mitglied: bastla
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
Bitte warten ..
Mitglied: m0nstar
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
Bitte warten ..
Mitglied: bastla
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:
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
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:
test123 
test876 
test345 
test34
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Entwicklung
gelöst Get ip from external txt file and use in vbscript (5)

Frage von thankusomuch zum Thema Entwicklung ...

Microsoft Office
gelöst Excel: Wie waagerechtes Säulendiagramm von oben nach unten durchzählen? (3)

Frage von Hobi84 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...