Thread CSV umwandeln (38 answers)
Opened by lukastonner at 2010-06-18 16:31

topeg
 2010-06-21 13:43
#138586 #138586
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.

View full thread CSV umwandeln