Re: [perl] zuordnungsprobl em [auf Viren überprüft]

David Haller <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
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

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.