perl key value array Frage

Begonnen von wkarl, 15 Juli 2013, 17:41:53

Vorheriges Thema - Nächstes Thema

wkarl

Hallo,

irgendwie kann ich nicht nachvollziehen was hier schiefläuft. Folgendes sub habe ich geschrieben (o, zusammenkopiert)
sub
HMLANRepeaterCfgOG() {
    my $rptr = "HMLAN_RepeaterOG";
    my $no = 1;
    my $sendName = "";
    my $recName = "";
    my %cfgArr = (
                    "F15D62"                    =>  "Badezimmer_TC",
                    "Badezimmer_TC"             =>  "F15D62",
                    "F15D62"                    =>  "Badezimmer_FH",
                    "Badezimmer_FH"             =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_TC",
                    "Schlafzimmer_TC"           =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_FH_Tuer",
                    "Schlafzimmer_FH_Tuer"      =>  "F15D62",
                    "F15D62"                    =>  "Schlafzimmer_FH_Fenster",
                    "Schlafzimmer_FH_Fenster"   =>  "F15D62",
                    "F15D62"                    =>  "Janine_TC",
                    "Janine_TC"                 =>  "F15D62",
                    "F15D62"                    =>  "Janine_FH_Tuer",
                    "Janine_FH_Tuer"            =>  "F15D62",
                    "F15D62"                    =>  "Janine_FH_Fenster",
                    "Janine_FH_Fenster"         =>  "F15D62",
                    "F15D62"                    =>  "Janine_TC",
                    "Vanessa_TC"                =>  "F15D62",
                    "F15D62"                    =>  "Vanessa_FH_Tuer",
                    "Vanessa_FH_Tuer"           =>  "F15D62",
                    "F15D62"                    =>  "Vanessa_FH_Fenster",
                    "Vanessa_FH_Fenster"        =>  "F15D62",
                    "F15D62"                    =>  "BadezimmerRolladen",
                    "BadezimmerRolladen"        =>  "F15D62",);
    while ( ($sendName, $recName) = each %cfgArr ) {
        Log 1, ">>> $no $sendName $recName";
        $no++;
    };
}

Dies ergibt dann diesen Log-Eintrag.
2013.07.15 17:31:44.319 1: >>> 1 Vanessa_TC F15D62
2013.07.15 17:31:45.102 1: >>> 2 Schlafzimmer_FH_Tuer F15D62
2013.07.15 17:31:45.102 1: >>> 3 F15D62 BadezimmerRolladen
2013.07.15 17:31:45.102 1: >>> 4 BadezimmerRolladen F15D62
2013.07.15 17:31:45.103 1: >>> 5 Schlafzimmer_TC F15D62
2013.07.15 17:31:45.103 1: >>> 6 Badezimmer_TC F15D62
2013.07.15 17:31:45.103 1: >>> 7 Janine_FH_Tuer F15D62
2013.07.15 17:31:45.107 1: >>> 8 Schlafzimmer_FH_Fenster F15D62
2013.07.15 17:31:45.109 1: >>> 9 Janine_FH_Fenster F15D62
2013.07.15 17:31:45.112 1: >>> 10 Janine_TC F15D62
2013.07.15 17:31:45.113 1: >>> 11 Vanessa_FH_Fenster F15D62
2013.07.15 17:31:45.113 1: >>> 12 Badezimmer_FH F15D62
2013.07.15 17:31:45.113 1: >>> 13 Vanessa_FH_Tuer F15D62

Zum einen nicht volständig, zum anderen sollte das nicht sauber von oben nach unten abgearbeitet werden?

Verzweifelten Dank schon mal.

ciao walter
FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen

justme1968

bei einem assoziativen array kannst du für jeden key (dein index) genau einen wert hinterlegen. wenn du für den gleichen key einen zweiten wert hinterlegst überschreibst du den ersten. die reihenfolge der keys ist nicht definiert.

wenn du mehr als einen wert pro key hinterlegen willst musst du als value etwas verwenden das mehrere elemente halten kann. also eine liste oder ein array. z.b. etwas in der art:

  ... "F15D62" => ["Badezimmer_TC", "Badezimmer_FH",...],...

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

wkarl

FHEM 5.7 & TabletUI 2.2 auf Fedora22 Server auf NUC5i5RYK
CUL 868 > FAST EnergyCam
HMLAN > HomeMatic TCs & VDs, Bewegungsmelder, Schalter, Taster, Steckdosen