Thread CSV umwandeln
(38 answers)
Opened by lukastonner at 2010-06-18 16:31
Ich habe eine Abneigung dagegen Dateien zu schreiben und danach sofort wieder zu lesen. Darum hier eine Variante, die auf das unnötige schreiben verzichtet, da direkt vom FTP-Server Zeilenweise gelesen wird:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #!/usr/bin/perl use strict; use warnings; use Net::FTP; use Text::CSV; #######ftp Zugangsdaten und Zielverzeichnis festlegen######## my $host = "ftp.1234.de"; my $user = "ich"; my $pass = "1234"; my $dest_dir = "/home/data/incoming/"; my $src_dir="/sonstiges/test"; my $in_sep=';'; my $out_sep="\t"; my $ftp = Net::FTP->new($host, Debug => 0) or die "Es konnte keine Verbindung zu $host: $@ aufgebaut werden"; $ftp->login($user, $pass) or die("Login schlug fehl: ".$ftp->message); $ftp->cwd($src_dir) or die "Ziel-Verzeichnis nicht gefunden", $ftp->message; foreach my $filename ($ftp->ls('*.*')){ my $ouput_filename="$dest_dir$filename"; # Datei setzen, die gelesen werden soll if(my $data=$ftp->retr($filename)){ my $csv=Text::CSV->new({ sep_char => $in_sep }); my $out_csv=Text::CSV->new({ sep_char => $out_sep }); open my $ofh, '>', $ouput_filename or die "Could not open $filename: $!"; while ( my $columns = $csv->getline( $data ) ) { $out_csv->combine(@$columns); print $ofh $out_csv->string()."\n"; } # Verbindung schließen $data->close(); close $ofh; } } print "\n Download beendet \n"; $ftp->quit(); Außerdem entscheide dich für eine Art der Konvertierung, entweder mit "tr" oder mit "Text::CSV" nicht beides. Außerdem musst du "Text::CSV" auch korrekt verwenden, so wie du es gemacht hast, funktioniert es nicht, Was aber nichts mit der Fehlermeldung zu tun hat. Du must "Text::CSV" erst noch installieren. |