Jemand zu Hause?Leser: 25
1
2
3
4
5
6
7
8
9
10
11
$ftp = Net::FTP->new($host, Debug => 0)
or die "Es konnte keine Verbindung zu $host: $@ aufgebaut werden", $ftp->message;
$ftp->login($user, $pass);
$ftp->cwd("/data/outgoing/")
or die "Ziel-Verzeichnis nicht gefunden", $ftp->message;
@dir = $ftp->ls('*.*');
foreach(@dir){
$filename=$_;
$ftp->get($filename, "@dest_dir$filename");
};
$ftp->quit();
my $filename = grep defined, /(?:^|,) (?: "([^"]+)" | ([^,]+))/xg;
Text::CSV_PP zum Abfragen der CSV-Felder, das ist reine Perl, das brauchst du nicht installieren. Regex sind zu fehleranfällig.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-06-18T14:31:58 lukastonneruse Text::CSV ist auf meiner Solaris Maschine nicht installiert.
ModuleWieInstalliereIchEinModul beschrieben installieren.
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem2010-06-18T14:56:35 lukastonnerKommas kommen ne Menge vor, die möchte ich ja durch Tab ersetzen....
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1 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
$ftp->get($filename, $local_file); open my $fh, '<', $local_file or die "Could not open $local_file: $!"; open my $ofh, ">", $local_file_converted or die "Could not open $local_file_converted: $!"; # wenn Text::CSV use Text::CSV; my $csv = Text::CSV->new(); my $ocsv = Text::CSV->new({ sep_char => ';' }); # --- while (my $line = <$fh>) { # wenn Text::CSV my $status = $csv->parse($line); # ggfs. fehler abfangen my @columns = $csv->fields(); $status = $ocsv->combine(@columns); # ggfs. fehler abfangen $line = $ocsv->string(); # wenn manuell $line =~ tr/,/;/; # --- print $ofh $line; } close $fh; close $ofh;
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem1
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
$ftp = Net::FTP->new($host, Debug => 0)
or die "Es konnte keine Verbindung zu $host: $@ aufgebaut werden", $ftp->message;
$ftp->login($user, $pass);
$ftp->cwd("/daten/outgoing/")
or die "Ziel-Verzeichnis nicht gefunden", $ftp->message;
@dir = $ftp->ls('*.*');
foreach(@dir){
$filename=$_;
$ftp->get($filename, "@dest_dir$filename");
#ab hier soll umgewandelt werden
open my $fh, '<', "@dest_dir$filename" or die "Could not open $filename: $!";
open my $ofh, ">", "@dest_dir$filename_converted" or die "Could not open $filename_converted: $!";
while (my $line = <$fh>) {
my $status = $csv->parse($line); # ggfs. fehler abfangen
my @columns = $csv->fields();
$status = $ocsv->combine(@columns); # ggfs. fehler abfangen
$line = $ocsv->string();
$line =~ tr/,/;/;
print $ofh $line;
close $fh;
}
}
print "\n Download beendet \n";
$ftp->quit();
Text::CSV initialisiert wird, ist es kein Wunder, dass man keine Methoden dieser Klasse darauf aufrufen kann.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
50
51
52
53
54
55
56
57
#!/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 $ftp = "";
my @dir = "";
my $filename = "";
my $filename_converted = "";
my $csv = "";
my $ocsv = "";
my $line = "";
$ftp = Net::FTP->new($host, Debug => 0)
or die "Es konnte keine Verbindung zu $host: $@ aufgebaut werden", $ftp->message;
$ftp->login($user, $pass);
$ftp->cwd("/daten/outgoing/")
or die "Ziel-Verzeichnis nicht gefunden", $ftp->message;
@dir = $ftp->ls('*.*');
foreach(@dir){
$filename=$_;
$ftp->get($filename, "@dest_dir$filename");
#ab hier soll umgewandelt werden
open my $fh, '<', "@dest_dir$filename" or die "Could not open $filename: $!";
open my $ofh, ">", "@dest_dir$filename_converted" or die "Could not open $filename_converted: $!";
while (my $line = <$fh>){
my $status = $csv->parse($line); # ggfs. fehler abfangen
my @columns = $csv->fields();
$status = $ocsv->combine(@columns); # ggfs. fehler abfangen
$line = $ocsv->string();
$line =~ tr/,/;/;
print $ofh $line;
close $fh;
}
}
print "\n Download beendet \n";
$ftp->quit();
2010-06-21T09:49:15 lukastonner[...]
sobald ich Text::CSV initialisiere gibt er mir ne wilde fehlermeldung "Can't locate Text/CSV.pm in @INC (@INC contains: /usr/per......"und das CPAN paket installieren geht glaub ich nicht (Adminrechte)
ModuleWieInstalliereIchEinModul lesen, was Dir ja bereits empfohlen wurde, denn die Behauptung man könne Module nicht ohne Adminrechte installieren ist schlichtweg falsch und in dem Wikiartikel steht auch wie es geht.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();
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;
use lib "/home/bm4381/perlmodule/";
use Text::CSV;
#######ftp Zugangsdaten und Zielverzeichnis festlegen########
my $host = "ftp.1234.de";
my $user = "ich";
my $pass = "1234";
my $dest_dir = "/home/daten/test/";
my $ftp = "";
my @dir = "";
my $filename = "";
my $csv = "";
my $in_sep=';';
my $out_sep="\t";
$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("/data/outgoing/")
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();
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
#!/usr/bin/perl use strict; use warnings; use Net::FTP; use lib "/home/bm4381/perlmodule/"; use Text::CSV; #######ftp Zugangsdaten und Zielverzeichnis festlegen######## my $host = "ftp.1234.de"; my $user = "ich"; my $pass = "1234"; my $dest_dir = "/home/daten/test/"; my $ftp = ""; my @dir = ""; my $filename = ""; my $csv = ""; # Eingabetrenner my $in_sep=','; # Ausgabetrenner my $out_sep="\t"; $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("/data/outgoing/") 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 ) ) { # Trenner im zweiten Feld ändern $columns->[1]=~s/\s+/T/g; $columns->[1]=~s!/!-!g; # alles wieder zusammenfügen $out_csv->combine(@$columns); print $ofh $out_csv->string()."\n"; } # Verbindung schließen $data->close(); close $ofh; } } print "\n Download beendet \n"; $ftp->quit();
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem$colums->[1]=~s/\s+/T/gs;
$out_csv->combine(@$columns);
1 2 3
for my $index (0 .. scalar @$columns - 1) { $columns->[$index] = 999 if length $columns->[$index] == 0; }
Wie frage ich & perlintro
brian's Leitfaden für jedes Perl-Problem