Leser: 18
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
#!/usr/bin/perl use 5.010; use warnings; use strict; use Text::CSV; my $file_in = 'addressbook.csv'; my $file_out = 'Test'; my $csv = Text::CSV->new( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag(); open my $fh_in, '<:encoding(utf8)', $file_in or die $!; open my $fh_out, '>:encoding(utf8)', $file_out or die $!; my @felder = ( 'Nachname', 'Vorname', 'Mobiltelefon', 'Telefon (privat)', 'E-Mail-Adresse', 'Homepage', 'Jahrestag' ); $csv->print( $fh_out, \@felder ); say $fh_out ''; $csv->column_names( $csv->getline( $fh_in ) ); while ( my $hr = $csv->getline_hr( $fh_in ) ) { my @row = @{$hr}{@felder}; $csv->print( $fh_out, \@row ); say $fh_out ''; }
1 2 3 4
while ( my $hr = $csv->getline_hr( $fh_in ) ) { $csv->print( $fh_out, \@{$hr}{@felder} ); say $fh_out ''; }
$csv->print( $fh_out, [ @{$hr}{@felder} ] );
1
2
3
~$ perl -MData::Dumper -e 'my %hash = (1,2,3,4,5,6,7,8); print Dumper \@hash{1,7}'
$VAR1 = \2;
$VAR2 = \8;
[@hash{@fields}]
"Formatierter Name","Nachname","Vorname","Zusätzliche Namen","Titel-Abk. (vor Name)","Titel-Abk. (nach Name)","Spitzname","Geburtstag","Straße (privat)","Staat/Bundesland (privat)","Staat/Bundesland (privat)","Postleitzahl (privat)","Land (privat)","Aufkleber (Privatadresse)","Straße (geschäftlich)","Stadt (geschäftlich)","Staat/Bundesland (geschäftlich)","Postleitzahl (geschäftlich)","Land (geschäftlich)","Aufkleber (Geschäftsadresse)","Telefon (privat)","Telefon (geschäftlich)","Mobiltelefon","Fax privat","Fax (geschäftlich)","Autotelefon","ISDN","Pager","E-Mail-Adresse","Mail-Programm","Titel","Rolle","Organisation/Firma","Abteilung","Notiz","Homepage","Beruf","Name des Assistenten","Name des Managers","Name des Partners","Büro","IM-Adresse","Jahrestag","Blog"
"Alex Kämmer","Kämmer","Alex","","","","","","","","","","","","","","","","","","","","+431234567890","","","","","","a.kaemmer@gmail.com","","","","","","","","","","","","","","",""
Guest GastHmm, deine CSV-Datei ist UTF-8 mit oder ohne BOM? Und hat die Ausgabedatei einen BOM?Wenn ich die Datei "addressbook.csv" mit meinem Editor ( Kwrite, Kodierung eingestellt auf Unicode(UTF-8) ) öffne, ist alles in Ordnung, ein 'ä' wird z.B. als 'ä' angezeigt.
Wenn ich die Outputdatei meines Skriptes anschaue, dann steht dort statt einem 'ä' ein 'ä' (großes A mit Tilde oben drauf und ein Kreis mit vier Fortsätzen ).
Habe ich mit '<:encoding(utf8)' und '>:encoding(utf8)' nicht bereits alles Nötige getan?