Thread Erste CSV-Zeile als Stringnamen verwenden (7 answers)
Opened by Steven at 2010-10-12 17:43

Steven
 2010-10-14 12:28
#141886 #141886
User since
2010-10-14
1 article
BenutzerIn
[default_avatar]
Vielen Dank für die schnellen Anworten und Hinweise.
Ich hänge mein Script mal stark gekürzt an, dann lässt sich mein Problem besser erklären:
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl

use CGI;
use strict;
use IO::File;

my $x=0;
my $csv = "internet.csv";
my @csvdaten;

my ($status, $artnr, $name, $short_description);

my $headdesc = '($status, $artnr, $name, $short_description)'; 

my $content = $headdesc;

# Datei internet.csv öffnen
open (IN_CSV, "<$csv") ||
    die "Datei internet.csv nicht lesbar";

# csv-Datei zeilenweise auswerten
while (<IN_CSV>){
    chop($_);
    $x++;
    
    if ($x=='1') {
        $_ =~ s/[ .{}]//g;
        $headdesc =~ s/[ \$\(\)]//g;
        $headdesc =~ s/,/;/g;
        
        open (OUT_STAMM, ">internet_artikelstamm.csv");
        print OUT_STAMM $headdesc, "\n";
        close (OUT_STAMM);

    }
    else {
        
        my ($ArtikelNr, $Bezeichnung, $Bezeichnung2) = split(/;/,$_);

        $artnr = $ArtikelNr;
        $name = $Bezeichnung;
        $short_description = $Bezeichnung2;
        $status = "Aktiviert";
        
        #
        #
        # weitere Manipulation der String-Daten
    }

    my @stammdaten = ($status,  $artnr, $name, $short_description);

    if (($name !~ /\*\*/)) {

        my $artikelstamm = join(';',@stammdaten);

        open (OUT_STAMM, ">>internet_artikelstamm.csv");
        print OUT_STAMM $artikelstamm, "\n";
        close (OUT_STAMM);

    }
}

close IN_CSV;


Hintergrund:
Ich bekomme eine maschinell erstellte csv-Datei(internet.csv) zur Verfügung gestellt bei der sich die Spaltenreihenfolge und -anzahl ändern kann. Deswegen will ich die Zuordnung der Variablen nicht fest hintelegen.

Am Ende der Verarbeitung brauche ich eine csv-Datei deren Format fix ist, die Überschriften haben dann eine andere Bezeichnung und Reihenfolge als die Original-Datei. Die Zuordnung erfolgt im Mittelteil - hier werden auch teilweise die Daten manipuliert. Dafür will ich die Variablen nur einmal fest hinterlegen und daraus sollen dann sowohl die Überschriften als auch die Daten generiert werden.
Bsp:
1.Zeile: status;artnr;name;short_description
2.Zeile: $status;$artnr;$name;$short_description
3.Zeile: $status;$artnr;$name;$short_description
usw

Ich hoffe das war jetzt etwas verständlicher. Vielen Dank für eure Hilfe.
Last edited: 2010-10-14 12:34:52 +0200 (CEST)

View full thread Erste CSV-Zeile als Stringnamen verwenden