• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

[PERL] Liste ohne mehrfache Elemente

Tulkas

Well-Known Member
Themenstarter #1
Hallo,
nun werde ich mich wahrscheinlich als absoluter Perl-Neuling outen ;), aber ich hab da ein kleines Problem:
Ich hab ein CSV-File, darin stehen verschiedene Artikel (u.A. mit dem Namen des Herstellers). Es können nun auch mehrere Artikel vom gleichen Hersteller stammen (oder es kann auch gar kein Herstellername angegeben sein).
Ich wollte gerne dieses CSV parsen und jedem Hersteller eine eindeutige ID vergeben (um später die Verbundtabelle Artikel <-> Hersteller in der SQL-Datenbank erstellen zu können), und dann die Daten in ein SQL-File schreiben, mit der ich die Datensätze in meine Datenbank einpflege.

Das Einlesen und in eine Liste schreiben klappt auch wunderbar, aber irgendwie beisse ich mir die Zähne an dem Erstellen einer Liste ohne mehrfach vorkommenden Namen (bzw. ohne leeren Eintrag) und der anschliessenden Vergabe der IDs aus.

Hat vielleicht einer einen Vorschlag, wie ich die Sache angehen könnte?

Danke im Voraus.

Gruß
Tulkas
 

LoRe

FreeBSD-Pilger
#2
Leider erzaehlst du nicht, wie die Datenstrukturen aussehen die du da hast, und was daraus werden soll (Code beispiele waeren hilfreich, oder ausgaben von Data::Dumper), deshalb mal ein Schuss ins Blaue:

Ich geh mal davon aus, dass du ein Array hast, in dem die ganzen Herstellernamen stehen, aber dieses Array nicht uniq ist.
Code:
           %seen = ();
           for (@Hersteller) {
               $seen{$_}++ if($_);
           }
           @uniq = keys %seen;
Deine IDs sind dann der Arrayindex.
 

Tulkas

Well-Known Member
Themenstarter #3
Danke für die Antwort.
Ich probiere mich ein wenig an einem Onlineshop für einen Freund von mir. Dazu hab ich den Oscommerce aus den Ports genommen.
Das CSV-File was ich zur Verfügung habe, hat aber nicht genügend Informationen um die ganzen Verbundtabellen zu füllen. Es hat folgende Aufteilung:
ArtikelNr ; Artikelname ; Kathegorie ; Hersteller ; Preis
Nun wollte ich noch eine Spalte mit HerstellerID einfügen. Nun weiss ich nicht (wegen zu wenig Erfahrung mit Perl, SQL etc) ob ich das sinnvollsterweise mit Perl mache, indem ich ein neues CSV-File mit dieser Spalte erstelle, diese nochmals parse und in SQL umwandle oder ob es noch andere Möglichkeiten gibt.

Danke für Tips

Gruß
Tulkas
 

LoRe

FreeBSD-Pilger
#4
DU gehst die Daten 2 mal durch, beim ersten mal suchst du dir nur die Hersteller raus, traegst sie in eine Herstellertabelle ein, und vergibst ihnen dort eine eindeutige ID.

Und dann gehst du die Daten nochmal durch, und schreibst die uebrigen Daten in eine 2. Tabelle und kannst den Hersteller dann referenzieren.