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

Printed on: April 19, 2024 at 21:04 o'clock

Member: Logan000
Logan000 Sep 11, 2007 at 12:32:40 (UTC)
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]
Member: bastla
bastla Sep 11, 2007 at 15:50:12 (UTC)
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
Member: bastla
bastla Sep 11, 2007 at 16:12:03 (UTC)
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
Member: cookie
cookie Sep 12, 2007 at 13:07:35 (UTC)
Goto Top
Vielen dank bastla.

wie immer, einfach nur genialface-smile

gruss
cookie