Hi,
mehrere "Fehler". Ich kommentiere das mal kurz:# 120000 mal mache folgendes:
for ($i=0 ; $i<=120000; $i+=1){
# öffne die Datei (wie oben gesagt - immer wieder!!!
open (TEST, "test.txt");
# schreibe alle 120000 Zeilen der Datei in ein Array - immer wieder!!!
@PR = <TEST>;
# jetzt gib mir nur die i-te Zeile und mach was damit
$ERROR_ZEILE = $PR[$i];
@search_error = split(/ /, $ERROR_ZEILE);
$error_test1 = $search_error[2];
$error_test2 = $search_error[3];
$error_test3 = $search_error[8];
$error_test4 = $search_error[9];
# das sieht unperlig aus, sollte aber funktionieren
if (($error_test1 eq "086")and($error_test2 eq "E60")and($error_test3 eq "1F")and($error_test4 eq "00")){
$error = $i; # in $error steht jetzt die Zeilennummer (mit 0 startend)
}
}
# hier willst Du rückwärts nach dem String "Scan" suchen? und dann die Zeilennummer ausgeben?
for ($j=$error; $j>=0; $j-=1){
$SCAN_ZEILE = $PR[$j];
@search_scan = split(/ /, $SCAN_ZEILE);
$search_test1 = $search_scan[12];
if ($search_test1 eq "Scan"){
print $j;
}
}
Du liest also 120000mal die ganze Datei in ein Array ein, holst dann jeweils eine Zeile raus, nach dem 120000. Durchlauf schliesst Du die Datei nicht (close), gehst dann vom letzen gefuundenen Vorkommen Deines Suchkriteriums rückwärts durch die ganzen 120000 Zeilen und gibst die Zeilennummern aus, in denen "Scan" vorkommt.
Ist es das was Du wolltest? Dann solltest Du auf jeden Fall die Datei einmal einlesen, sie nicht komplett "slurpen", die Vorkommnisse in ein Array oder so speicher und damit nach "Scan" suchen.
Viel Glück,
Sven
PS: bei ein paar Mio. Zeilen würde sonst vermutlich Dein Rechner abstürzen...
Datum: 18.07.2008-14:13
