Leser: 21
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
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use Text::CSV_XS;
my $file = 'xt_customers_addresses.csv'; #csv file name
my @rows; # array that will store csv values
my $csv = Text::CSV_XS->new ({ binary => 1 }) or
die "Cannot use CSV: ".Text::CSV->error_diag ();
#open file
open my $FH, "<:encoding(ISO-8859-15)", "$file" or die "$file: $!";
#skip first n (10 in this case) lines
<$FH> for 1 .. 10;
#read file in while loop
# my $i = 1;
while (my $row = $csv->getline ($FH) ) {
# if ($i > 1)
{push @rows, $row;}
# $i++;
}
$csv->eof or $csv->error_diag ();
#close file
close $FH;
#print contents of @rows array
for my $print_rows (@rows)
{
print "@$print_rows\n";
}
# Working with file2
my $file = 'xt_customers_addresses.csv'; #csv file name
my @rows; # array that will store csv values
my $csv = Text::CSV_XS->new ({ binary => 1 }) or
die "Cannot use CSV: ".Text::CSV->error_diag ();
my $file2 = 'xt_customers_addresses.txt'; #csv file name
my @rows2; # array that will store csv values
my $csv2 = Text::CSV_XS->new ({ binary => 1 }) or
die "Cannot use CSV: ".Text::CSV->error_diag ();
#open file
open my $FH2, "<:encoding(ISO-8859-15)", "$file2" or die "$file2: $!";
#skip first n (10 in this case) lines
<$FH2> for 1 .. 10;
#read file in while loop
# my $i = 1;
while (my $row2 = $csv2->getline ($FH2) ) {
# if ($i > 1)
{push @rows2, $row2;}
# $i++;
}
$csv2->eof or $csv2->error_diag ();
#close file
close $FH2;
#print contents of @rows array
for my $print_rows2 (@rows2)
{
print "@$print_rows2\n";
}
QuoteDann gibt es Kunden, die haben etwas BEstellt und über die Bestellung wurde eine Kundennummer in der Warenwirtschaft angelegt.
Die müssen dann übernommen werden, allerdings muss das Kundenkennwort was sie sich ausgesucht haben übernommen werden.
1
2
3
10000;;10000;;"0000-00-00 00:00:00";3444322;;;;;;;"Schmalweg 2";;22222;"Hamburg";;"default";"0000-00-00 00:00:00";"0000-00-00 00:00:00"
10001;;10001;;"0000-00-00 00:00:00";455566;;'Firma 2';;;;;;;;;;"default";"0000-00-00 00:00:00";"0000-00-00 00:00:00"
10002;;10002;;"0000-00-00 00:00:00";33344;2366885935;"Firma 1";;;;;"Weiter Weg 3";;12345;"Hofhausen";;"default";"0000-00-00 00:00:00";"0000-00-00 00:00:00"
2011-10-05T19:46:00 rostiCSV-Datei als Puffer? Nö!
Auch wenn es dafür Module gibt: eine CSV-Datei ist und bleibt eine textlich strukturierte Datei, mit dem Vorteil, dass sie menschlich lesbar und dem Nachteil, dass ein Datentransfer über solche Dateien schweinelangsam ist. Den Vorteil braucht kein Mensch und über den Nachteil brauchen wir nicht zu diskutieren.
Du brauchst: Dateien, die maschinell geschrieben und gelesen werden. Gucke Dir das Modul Storable an, in freeze/thaw sind Algorithmen imlementiert, die beliebige(!) Datenstrukturen in Binärsequenzen (Dateien) serialisieren und umgekehrt aus Binaries auch unzerknittert wieder herstellen. Das ist alles schon fix und fertig und zwar auf Byte-Ebene ;)
Was Dir bleibt sind Überlegungen zu geschickten Datenstrukturen, über die Dein Datentransfer von einem System zum Anderen abgewickelt wird, wie diese zwischenschrittlich in Dateien gepuffert werden, ist völlig uninteressant, das erledigt Storable und IO::File und das würde ich mit Bestimmtheit NICHT über CSV-Dateien machen.
Nurmalso nebenbei ;)
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
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
use DBI;
my $dbh = DBI->connect('DBI:mysql:db;host=xx.stratoserver.net', 'xx', 'xx',
{ RaiseError => 1 }
);
$dbh->disconnect();
print "CSV Vergleich vom 06.10.2011\n";
my@rows;
my $csv = Text::CSV->new ( { binary => 1 , sep_char => ";" } )
or die "File not found: ".Text::CSV->error_diag ();
open my $fh, "<:encoding(ISO-8859-15)", "xt_customers.csv" or die "xt_customers.csv $!";
while ( my $row = $csv->getline ( $fh ) ) {
my @members_of_the_row = @$row;
# print @members_of_the_row;
# print "\n";
print $row->[0], "\n"
# Baustelle
my $statement = $dbh->prepare('SELECT * FROM xt_customers WHERE customers_id = ?');
my @db_row = $statement->fetchrow;
if (@db_row) { print "Den Kunden $kundennummer gibt es\n" }
# Baustelle
}
$csv->eof or $csv->error_diag();
close $fh;