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



#!/COMMUNITY

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




11.02.2012 / 06:29

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


BeitragPerformance: Schreiben in Datei
Seitenanfang
Ich habe folgendes Problem:

Ich selektiere Daten aus einer Tabelle einer
Tabelle mit selectall_arrayref in $aref.
Das Skript läuft auf einem Webserver, die selektierten Daten sollen danach in eine Datei auf dem Webserver geschrieben werden.
Dazu benutze ich folgende sub:

#sub, um selektierte Daten in Datei zu #schreiben
sub write_data_to_dat{
my $i_dat_name = shift;
my $i_first_line = shift;
my $i_aref = shift; #array_ref von select
my $i_num_col = shift; #Anzahl der Spalten in $aref
my $l_row; #Zeile von $aref
my $l_line; #Zeile für die Datei
my $l; #Zählvariable
open(DATEI,">$i_dat_name")|| die "$c_e_no_open";
print DATEI $i_first_line;
for $l_row (@$i_aref){
$l_line = $l_row->[0];
$l = 1;
do {
$l_line = $l_line . "\t" . $l_row->[$l];
$l = $l + 1;
}until($l eq $i_num_col);
$l_line = $l_line . "\n";
print DATEI $l_line;
} #endfor
close(DATEI);
} #endsub

Es gibt 52 Spalten ($i_num_col).

Das Ganze funktioniert auch, aber die Performance beim Schreiben in die Datei ist absolut indiskutabel. So weit ich sehe, tritt das Problem bei Zeilen mit sehr vielen Initialwerten auf (Null auf der Datenbank)!

Kann mir jemand weiterhelfen?
Danke im Vorraus!
Antje

Datum: 16.12.2008-10:54

Beitragre: Performance: Schreiben in Datei
Seitenanfang
Du machst das ziemlich umständlich...

Probier mal

sub write_data_to_dat{
my $i_dat_name = shift;
my $i_first_line = shift;
my $i_aref = shift; #array_ref von select
my $i_num_col = shift; #Anzahl der Spalten in $aref

open(DATEI,">$i_dat_name")|| die "$c_e_no_open";
print DATEI $i_first_line;
for my $row ( @$i_aref ){
print DATEI join( "\t", @{ $row }[0..$i_num_col] ), "\n";
}
close DATEI;
} #endsub

Kommt es denn überhaupt vor, dass in einer "Zeile" mehr als die $i_num_col-Elemente sind?

Datum: 16.12.2008-13:47

Beitragre: Performance: Schreiben in Datei
Seitenanfang
Danke für den eleganten Tip! Hat aber leider keinen nennenswerten Erfolg gebracht. Ich habe jetzt in meiner alten Lösung eine Abfrage eingefügt, od der Wert "defined" ist Also:
sub write_data_to_dat{
my $i_dat_name = shift;
my $i_first_line = shift;
my $i_aref = shift; #array_ref von select
my $i_num_col = shift; #Anzahl der Spalten in $aref
my $l_row; #Zeile von $aref
my $l_line; #Zeile für die Datei
my $l; #Zählvariable
open(DATEI,">$i_dat_name")|| die "$c_e_no_open";
print DATEI $i_first_line;
for $l_row (@$i_aref){
$l_line = $l_row->[0];
$l = 1;
do {
unless (defined $l_row->[$l]){
$l_line = $l_line . "\t";}
else{
$l_line = $l_line . "\t" . $l_row->[$l];
}
$l = $l + 1;
}until($l eq $i_num_col);
$l_line = $l_line . "\n";
print DATEI $l_line;
} #endfor
close(DATEI);
} #endsub

Gibt es eine ähnliche Lösung auch für Join?

Gruß Antje

Datum: 16.12.2008-14:21

-






-
-