cookie
Goto Top

File durchsuchen, kopieren und danach weiter suchen

Hallo zusammen.

Ich möchte aus Logfiles (teilweise über eine Million Zeilen gross) einen Wert suchen, in eine neue Textdatei kopieren danach weiter suchen.

Der wert sieht z.B so aus: CopiesCompleted="39"

Wobei sich die Zahl dahinter immer ändert. Genau diese Zahl benötige ich aber für eine Verrechnung. Nun meine Frage, ist es möglich das TextFile PCNAME.txt nach dem Wert CopiesCompleted= zu durchsuchen, die Zahl dahinter zu kopieren, danach im Textfile weitersuchen und gleich aufaddieren? So das zum schluss nur noch angezeigt wird CopiesCompleted=5201 oder so in etwa.

Vielen dank.

Gruss
Cookie

Content-Key: 68413

Url: https://administrator.de/contentid/68413

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: Logan000
Logan000 11.09.2007 um 14:32:40 Uhr
Goto Top
per vbSkript solte das in etwa so gehen:
Const szSuch = "text" ' Such test  

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objSourceFile = objFSO.OpenTextFile("Source.txt", 1)	' Quelldatei öffnen  
Set objDestFile = objFSO.CreateTextFile("Dest.txt", True)	' Zieldatei anlegen / überschreiben  

	Do Until objSourceFile.AtEndOfStream 	' Gesammtes TextDok durchgehen  
		szNextLine = objSourceFile.Readline	' Zeile aus Quelldatei einlesen  
		if instr(szNextLine,szSuch) Then	' Wenn Suchtest vorhanden  
			objDestFile.writeline szNextLine '  Zeile in Zieldatei schreiben  
		end if		
	Loop
Das aufaddieren fehlt. Aber ich hoffe, es ist immerhin ein Anfang.

[Edit Biber] Formatierung auf < code > gesetzt. [/Edit]
Mitglied: bastla
bastla 11.09.2007 um 17:50:12 Uhr
Goto Top
Hallo Cookie!

Wenn Du tatsächlich nur die Gesamtsumme benötigst, sollte eigentlich folgendes reichen:
@echo off & setlocal
for /f "tokens=2 delims==" %%i in ('findstr "CopiesCompleted=" Source.txt') do set /a Anzahl+=%%i >nul  
echo CopiesCompleted=%Anzahl%

Grüße
bastla
Mitglied: bastla
bastla 11.09.2007 um 18:12:03 Uhr
Goto Top
... und das (geringfügig ergänzte) Script von Logan000 schreibt auch noch vorweg die gefundenen Zeilen in die Zieldatei:
Const szSuch = "CopiesCompleted=" 'Suchtext  
iRelPos = Len(szSuch) + 1 'relative Position (bezogen auf den Beginn des Suchtextes) der gesuchten Zahl  

Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set objSourceFile = objFSO.OpenTextFile("Source.txt", 1) 'Quelldatei öffnen  
Set objDestFile = objFSO.CreateTextFile("Dest.txt", True) 'Zieldatei anlegen / überschreiben  

lSumme = 0
Do Until objSourceFile.AtEndOfStream 'gesamtes TextDok durchgehen  
	szNextLine = objSourceFile.Readline 'Zeile aus Quelldatei einlesen  
	iPos = InStr(szNextLine, szSuch) 'Position des Suchtextes feststellen  
	If iPos Then ' Wenn Suchtext vorhanden  
		iStart = iPos + iRelPos 'Starposition der gesuchten Zahl berechnen  
		iEnd = InStr(iStart, szNextLine, Chr(34)) 'schließendes Anführungszeichen suchen  
		If iEnd Then 'wenn gefunden, Zeile verwertbar  
			objDestFile.WriteLine szNextLine 'Zeile in Zieldatei schreiben  
			'Text ab Startposition bis vor Endposition in Zahl umwandeln und aufsummieren  
			lSumme = lSumme + CLng(Mid(szNextLine, iStart, iEnd - iStart))
		End If
	End If
Loop

objDestFile.WriteLine 'Leerzeile in Zieldatei schreiben  
objDestFile.Write szSuch & CStr(lSumme) 'Summe in Zieldatei schreiben (ohne abschließende Zeilenschaltung)  
objDestFile.Close

Grüße
bastla
Mitglied: cookie
cookie 12.09.2007 um 15:07:35 Uhr
Goto Top
Vielen dank bastla.

wie immer, einfach nur genialface-smile

gruss
cookie