perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 34
Click for quality!




10.02.2012 / 10:09

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragWo ist der Fehler?
Seitenanfang
Hallo!
ich bin ein Anfänger und habe noch nicht wirklich viel Ahnung von Perl, hab aber schon ein paar kleine Programme geschrieben die auch funktionieren.
Jetzt bin ich gerade dabei ein neues zu schreiben und stehe irgendwie auf dem Schlauch, fast ist hier falsch? Die Datei hat 120.000 Zeilen, das Programm läuft ewig lang und gibt nicht das richtige aus.
mfg
Dimitri


#!/usr/local/bin/perl

for ($i=0 ; $i<=120000; $i+=1){

open (TEST, "test.txt");
@PR = <TEST>;

$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];

if (($error_test1 eq "086")and($error_test2 eq "E60")and($error_test3 eq "1F")and($error_test4 eq "00")){
$error = $i;
}}
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;

}}

Datum: 11.07.2008-16:43

BeitragWo ist der Fehler?
Seitenanfang
ahja, ich hab das auf einem Ausschnitt von der ganzen Datei ausprobiert, 100 Zeilen, und es hat geklappt, mit der ganzen klappt es aber nicht.

Datum: 11.07.2008-16:48

Beitragre: Wo ist der Fehler?
Seitenanfang
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

Beitragre: Wo ist der Fehler?
Seitenanfang
"das Programm läuft ewig lang und gibt nicht das richtige aus." ist keine hinreichende Beschreibung des Problems. Da wir nicht genau wissen, was Du willst und was das Programm ausgibt, kann so ziemlich alles ein "Fehler" sein.

Ganz lesenswert:
http://wiki.perl-community.de/bin/view/Wissensbasis/AllgemeinesWieFrageIchbeiPerlCommunity

Datum: 18.07.2008-17:03

-






-
-