Thread maximale Größe eines Arrays (33 answers)
Opened by cohama at 2014-06-12 09:27

FIFO
 2014-06-12 13:38
#175995 #175995
User since
2005-06-01
469 Artikel
BenutzerIn

user image
2014-06-12T09:57:49 cohama
Kurzum:
Warum beinhaltet die Ergebnis-Datei nur einen Teil des Ergebnis-Arrays?
Das ist die eigentliche Frage meines Threads.


Welches ist das Handle zur Ergebnis-Datei? File2? ExtFile? Und das Ergebnis-Array: @Array3? @Array4? Warum nennst Du es nicht @result oder @output? Ob Du Variablen vorher deklarierst ist eher Geschmackssache, aber nicht wie Du sie benennst.

Welcher Teil des Ergebnis-Arrays erscheint in der Ausgabedatei? Hellsehen ist bei dieser Hitze verdammt schwierig ... Zeig mal Ein- und Ausgabedaten!

Ein Skript, das man mehrfach lesen muss, um den Ablauf zu verstehen, ist nicht nur ästhetisch miese, es ist auch unwirtschaftlich, weil man sich diese Arbeit jedesmal von neuem machen muss. Und es ist den anderen gegenüber eine Zumutung, insbesondere, wenn man eigentlich Hilfe bekommen möchte.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
foreach(@Array){
        $line   = shift(@Array);                                # Read the next line to line-Parameter
        $Ext    = $1 if($line =~/EXTENSIONNUM=(\d+)/);          # Extract the Extension-Number
        $ExtName  = $1 if(($line =~ /NAME=(\d+)/)||($line =~ /NAME=(\w+)(\d+)/));
        $allocDate = $1 if ($line =~ /DATEALLOCATED=(\d+-\d+-\d+)/);
        $AccountID = $1 if ($line =~ /ACCOUNTID=(\d+)/);
        push(@Array3,$ExtName," ",$Ext," ",$AccountID," ",$allocDate,"\n");
        push(@Array4,$Ext,"\n");
}


Es gibt gute Nachrichten: Whitespace ist jetzt steuerfrei!
Das gleiche etwas aufgelockert und ohne das überflüssige shift, auch die Klammern dienen keineswegs immer der Barrierefreiheit:
Code (perl): (dl )
1
2
3
4
5
6
7
8
foreach my $line( @Array ){
        $Ext        = $1 if $line =~ /EXTENSIONNUM=(\d+)/;              # Extract the Extension-Number
        $ExtName   = $1 if $line =~ /NAME=(\w+)/;
        $allocDate = $1 if $line =~ /DATEALLOCATED=(\d+-\d+-\d+)/;
        $AccountID = $1 if $line =~ /ACCOUNTID=(\d+)/;
        push(@Array3,$ExtName," ",$Ext," ",$AccountID," ",$allocDate,"\n");
        push(@Array4,$Ext,"\n");
}


Die Verwendung des postfix-if ist ohnehin nur ratsam für kurze Bedingungen.

Code: (dl )
push(@Array3,$ExtName," ",$Ext," ",$AccountID," ",$allocDate,"\n");

Bist Du sicher, dass Du nicht einen String-concat machen wolltest (. statt ,)?
Btw: Ist Dir klar, dass in $Ext usw. ggf. das Ergebnis eines früheren Matches steht?

Edit: \w beinhaltet übrigens die Dezimalziffern, daher ist Deine Konstruktion $line =~ /NAME=(\w+)(\d+)/ relativ sinnfrei. Nochmal Edit: ... und damit die ||-Geschichte ebenfalls.

Code: (dl )
open (File2,">",$FileName)|| print "Error:Export-File dont writeable";


Um es mit Deinen Worten zu sagen: Error: Script dont readable. SCNR
Last edited: 2014-06-12 14:01:27 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread maximale Größe eines Arrays