Thread Funktion die Werte, welche kommagetrennt in einem String stehen in Array speichert? (14 answers)
Opened by bandchef at 2014-05-16 13:30

GwenDragon
 2014-05-16 14:37
#175553 #175553
User since
2005-01-17
14542 Artikel
Admin1
[Homepage]
user image
Auch wenn es lehrerhaft klingt, ich empfehle dafür: CPAN:Text::CSV

Beispiel:
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
#!/usr/bin/perl

use strict; 
use warnings;

use Text::CSV;
use utf8;           # wg. Umlauten in __DATA__

my $csv = Text::CSV->new;
my $firstline = 1;                      # Flag ob erste Zeile 
my @keys; 
while (my $line = <DATA>) {                                     # eien Datenzeile aus __DATA__ lesen
        my $status  = $csv->parse($line);        # CSV-Zeile parsen
        warn $csv->error_diag() if not $status;  # falls etwas schief ging, dann Fehler ausgeben
        
        my @columns = $csv->fields();            # geparste Felder
        
        if ($firstline) {
                $firstline = 0;
                @keys = @columns;                                       # Feldnamen kopieren
                next;
        }
        
        print                                   # Ausgabe von
                "$_: ",                         #   Feldname
                shift(@columns),        #       Wert des Feldes aus Array lesen
                "\n"                            #       Return für Ausgabe
        for @keys;                              # für alle Feldnamen
}

__DATA__
ID,Vorname,Name,Buch,Preis,Verlag
1,Josef,Gans,"Das Komma (,)",23.50,"Büchle Verlag, Zürich"
2,Antonia,Zwerg,"Buchstaben, Worte sind Schall",18.20,OX-Verlag
3,Adam,Riese,"Schnee aus Witten, Reihe: Krimi und Leidenschaft",18.00,Oldschool-Verlag

ergibt:
ID: 1
Vorname: Josef
Name: Gans
Buch: Das Komma (,)
Preis: 23.50
Verlag: Büchle Verlag, Zürich
ID: 2
Vorname: Antonia
Name: Zwerg
Buch: Buchstaben, Worte sind Schall
Preis: 18.20
Verlag: OX-Verlag
ID: 3
Vorname: Adam
Name: Riese
Buch: Schnee aus Witten, Reihe: Krimi und Leidenschaft
Preis: 18.00
Verlag: Oldschool-Verlag



denn split ist nicht so das wahre:
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
#!/usr/bin/perl

use strict; 
use warnings;

use utf8;           # wg. Umlauten in __DATA__

my $firstline = 1;                      # Flag ob erste Zeile 
my @keys; 
while (my $line = <DATA>) {                                     # eien Datenzeile aus __DATA__ lesen
        my @columns = split /,/,$line;            
        if ($firstline) {
                $firstline = 0;
                @keys = @columns;                                       # Feldnamen kopieren
                next;
        }       
        print                                   # Ausgabe von
                "$_: ",                         #   Feldname
                shift(@columns),        #       Wert des Feldes aus Array lesen
                "\n"                            #       Return für Ausgabe
        for @keys;                              # für alle Feldnamen
}

__DATA__
ID,Vorname,Name,Buch,Preis,Verlag
1,Josef,Gans,"Das Komma (,)",23.50,"Büchle Verlag, Zürich"
2,Antonia,Zwerg,"Buchstaben, Worte sind Schall",18.20,OX-Verlag
3,Adam,Riese,"Schnee aus Witten, Reihe: Krimi und Leidenschaft",18.00,Oldschool-Verlag

denn es ergibt:
ID: 1
Vorname: Josef
Name: Gans
Buch: "Das Komma (
Preis: )"
Verlag
: 23.50
ID: 2
Vorname: Antonia
Name: Zwerg
Buch: "Buchstaben
Preis: Worte sind Schall"
Verlag
: 18.20
ID: 3
Vorname: Adam
Name: Riese
Buch: "Schnee aus Witten
Preis: Reihe: Krimi und Leidenschaft"
Verlag
: 18.00

Last edited: 2014-05-16 14:42:42 +0200 (CEST)
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread Funktion die Werte, welche kommagetrennt in einem String stehen in Array speichert?