[perl] zuordnungsproblem [auf Viren überprüft]
Hallo! Ich habe einen Datensatz aus mit Komma getrennten Werten: feld1;wert1;feld2;wert2;feld3;wert3; Daraus einen Hash zu bilden, wäre ja nicht das Problem. Letztendlich soll daraus ein LDIF-Datensatz werden. Dazu muß ich die Feldnamen anhand einer weiteren Zuordnung in die entsprechenden Attribute ändern. feld1 -> attribute1 feld2 -> attribute2 Wie verknüpfe ich am besten die Ausgangs"tabelle" mit meiner LDIF-Übersetzungs"tabelle", damit ich folgende Zuordnung erhalte: feld1 - wert1 ---> attribute1 - wert1 ? Ein Hash mit einem 2 dimensionalen Array? Hans
Moin, Am Mittwoch, 15. Februar 2006 17:26 schrieb Hans Moser:
Hallo!
Ich habe einen Datensatz aus mit Komma getrennten Werten: feld1;wert1;feld2;wert2;feld3;wert3;
Daraus einen Hash zu bilden, wäre ja nicht das Problem. Letztendlich soll daraus ein LDIF-Datensatz werden. Dazu muß ich die Feldnamen anhand einer weiteren Zuordnung in die entsprechenden Attribute ändern. feld1 -> attribute1 feld2 -> attribute2
Wie verknüpfe ich am besten die Ausgangs"tabelle" mit meiner LDIF-Übersetzungs"tabelle", damit ich folgende Zuordnung erhalte: feld1 - wert1 ---> attribute1 - wert1 ? Ein Hash mit einem 2 dimensionalen Array?
Meinst Du sowas? <schnipp> #! /usr/bin/perl use strict; use warnings; my %ldif = ("feld1" => "attribute1", "feld2" => "attribute2", "feld3" => "attribute3"); my $line = "feld1;wert1;feld2;wert2;feld3;wert3;"; my %out = (); my @f = split /;/, $line; for (my $i = 0; $i < $#f; $i+=2) { my @a = ($ldif{$f[$i]}, $f[$i+1]); $out{$f[$i]} = \@a; } foreach (sort keys %out) { my $aref = $out{$_}; print $_, " = ", @$aref[1], " ---> ", @$aref[0], " = " , @$aref[1], "\n"; } exit 0; <schnapp> cu Jan
Hallo, Am Wed, 15 Feb 2006, Jan Trippler schrieb:
Am Mittwoch, 15. Februar 2006 17:26 schrieb Hans Moser:
Ich habe einen Datensatz aus mit Komma getrennten Werten: feld1;wert1;feld2;wert2;feld3;wert3;
Daraus einen Hash zu bilden, wäre ja nicht das Problem. Letztendlich soll daraus ein LDIF-Datensatz werden. Dazu muß ich die Feldnamen anhand einer weiteren Zuordnung in die entsprechenden Attribute ändern. feld1 -> attribute1 feld2 -> attribute2
Wie verknüpfe ich am besten die Ausgangs"tabelle" mit meiner LDIF-Übersetzungs"tabelle", damit ich folgende Zuordnung erhalte: feld1 - wert1 ---> attribute1 - wert1 ? Ein Hash mit einem 2 dimensionalen Array?
Meinst Du sowas?
<schnipp> #! /usr/bin/perl
use strict; use warnings;
my %ldif = ("feld1" => "attribute1", "feld2" => "attribute2", "feld3" => "attribute3");
my $line = "feld1;wert1;feld2;wert2;feld3;wert3;"; my %out = ();
my @f = split /;/, $line; for (my $i = 0; $i < $#f; $i+=2) { my @a = ($ldif{$f[$i]}, $f[$i+1]); $out{$f[$i]} = \@a; }
foreach (sort keys %out) { my $aref = $out{$_}; print $_, " = ", @$aref[1], " ---> ", @$aref[0], " = " , @$aref[1], "\n"; }
exit 0; <schnapp>
Man kann auch ausnuetzen, dass ein hash nur eine Sonderform eines Arrays ist... ==== #!/usr/bin/perl -w use strict; my %ldif = ("feld1" => "attribute1", "feld2" => "attribute2", "feld3" => "attribute3"); my %o; my %l = split(';', $line); map { $o{ $ldif{$_} } = $l{$_}; } keys %l; print map { "$_ = $o{$_}\n"; } sort keys %o; ==== *SCNR* BTW: 'map' und 'grep' sind verdammt nuetzliche Funktionen, die ich lange unterschaetzt habe und ich denke das geht vielen so. Ein Beispiel aus dem Kochbuch um ein Array "uniq" zu machen: my %seen; my @array = qw( foo bar baz bla fasel laber ); my @uniqed = grep { ! $seen{$_}++ } @array; Grad vorhin so gemacht mit einer Liste von Zeilen die zusammen in "$_" stehen: print join("\n", grep { $_ && ! $seen{$_}++ } split('\n')), "\n"; Das ueberspringt auch gleich noch Leerzeilen. Fuer 'map' hats ja oben zwei Beispiele :) -dnh PS: Jan, ich vermisse unsere script-Feilereien ;) --
This is *not* a drill. -- WDOA This, however, is a drill. You remember how you said you needed that 'upgrade' like you needed a hole in the head? *wanders off to find "trepaning for beginners"* -- Aquarion
David Haller schrieb:
Am Wed, 15 Feb 2006, Jan Trippler schrieb:
BTW: 'map' und 'grep' sind verdammt nuetzliche Funktionen, die ich lange unterschaetzt habe und ich denke das geht vielen so. Ein Beispiel aus dem Kochbuch um ein Array "uniq" zu machen:
Dank an euch beide! map werde ich mir dann noch mal genauer anschauen. Hans
participants (3)
-
David Haller
-
Hans Moser
-
Jan Trippler