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
#!/usr/bin/perl use strict; use warnings; use 5.010; use utf8; use Data::Dumper; # Kann auskommentiert werden, wenn alles läuft my $daten = "Wohnen -> Roll1, Wohnen -> Roll2, Wohnen -> Roll3, Bad -> Roll4, HWR -> Roll5 Wohnen -> Roll6, "; my @daten = split /,?\n/,$daten; # Daten nach ,LF aufteilen # Kann auskommentiert werden, wenn alles läuft say Dumper \@daten; # nur zu Ausgabe was nach split drin ist my %hash; map { my ($key, $value) = split /\s+->\s+/; # Zeile am -> aufteilen, um Schlüssel + Wert zu bekommen push @{ $hash{$key} },$value; # Wert in Array (wegen mehrfacher Werte!) schieben } @daten; # Kann auskommentiert werden, wenn alles läuft say Dumper \%hash; # # nur zu Ausgabe was am Schluss drin ist
my ($key, $value) = split /\s+->\s+/; # Zeile am -> aufteilen, um Schlüssel + Wert zu bekommen
1
2
3
4
5
map {
my ($key, $value) = split /\s+->\s+/; # Zeile am -> aufteilen, um Schlüssel + Wert zu bekommen
push @{ $hash{$key} },$value; # Wert in Array (wegen mehrfacher Werte!) schieben
}
@daten;
Guest TomDein Beispiel funktioniert prima. Mein Echteinsatz hier leider noch nicht.
Ich verwende FHEM als Homeautomatisierung und die Daten die ich meine vor mir liegen zu haben, sind scheinbar nicht korrekt.
Guest Tomich habe ein %hash :
Wohnen -> Roll1,
Wohnen -> Roll2,
Wohnen -> Roll3,
Bad -> Roll4,
HWR -> Roll5
Wohnen -> Roll6,
und ein @array mit den Werten: "Wohnen Bad HWR"
QuoteDas passiert, wenn du eine Arrayreferenz ausgeben willst. Das werzeugt bwispielsweise sowas: ARRAY(0x74a39c)Da bekomme ich als value nur ARRAY .... angezeigt.
1
2
3
4
5
6
7
8
9
foreach my $device (@devices){
my $roomName = AttrVal($device,'Auto_Zimmer',"NV");
my $temp = "$roomName - $device";
push (@roomDev, $temp);
#fhem("setreading $ARSDev $device $roomName");
}
Badezimmer - Roll.BadDach Badezimmer - Roll.BadGiebel Flur - Roll.Flur GaesteWC - Roll.GaesteWC HWR - Roll.HWR Kino - Roll.KinoVorne Kueche - Roll.Kueche MiloSchlafen - Roll.MiloSchlafen Schlafen - Roll.Schlafen Wohnzimmer - Roll.WohnzimmerFensterDoert Wohnzimmer - Roll.WohnzimmerSonnenterrasse Wohnzimmer - Roll.WohnzimmerStrasseLinks Wohnzimmer - Roll.WohnzimmerStrasseRechts Wohnzimmer - Roll.WohnzimmerTerrasseGarten
Guest TomUnd wenn ich mir @roomDev ausgeben. Sieht das wie folgt aus:
Code: (dl )Badezimmer - Roll.BadDach Badezimmer - Roll.BadGiebel Flur - Roll.Flur GaesteWC - Roll.GaesteWC HWR - Roll.HWR Kino - Roll.KinoVorne Kueche - Roll.Kueche MiloSchlafen - Roll.MiloSchlafen Schlafen - Roll.Schlafen Wohnzimmer - Roll.WohnzimmerFensterDoert Wohnzimmer - Roll.WohnzimmerSonnenterrasse Wohnzimmer - Roll.WohnzimmerStrasseLinks Wohnzimmer - Roll.WohnzimmerStrasseRechts Wohnzimmer - Roll.WohnzimmerTerrasseGarten
mit:
Lass ich mir die Daten dann ausgeben. Es werden mir bei @raum auch alle 9 Räume angezeigt.
Nur bei @rollo kommmt 9x die ARRAY .. Ausgabe. Es sind allerdings auch 11 Rollläden.
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
[$VAR1 = 'Kino';
$VAR2 = [
'Roll.KinoVorne'
];
$VAR3 = 'Kueche';
$VAR4 = [
'Roll.Kueche'
];
$VAR5 = 'Flur';
$VAR6 = [
'Roll.Flur'
];
$VAR7 = 'MiloSchlafen';
$VAR8 = [
'Roll.MiloSchlafen'
];
$VAR9 = 'Schlafen';
$VAR10 = [
'Roll.Schlafen'
];
$VAR11 = 'Wohnzimmer';
$VAR12 = [
'Roll.WohnzimmerFensterDoert',
'Roll.WohnzimmerSonnenterrasse',
'Roll.WohnzimmerStrasseLinks',
'Roll.WohnzimmerStrasseRechts',
'Roll.WohnzimmerTerrasseGarten'
];
$VAR13 = 'HWR';
$VAR14 = [
'Roll.HWR'
];
$VAR15 = 'Badezimmer';
$VAR16 = [
'Roll.BadDach',
'Roll.BadGiebel'
];
$VAR17 = 'GaesteWC';
$VAR18 = [
'Roll.GaesteWC'
];
]
1
2
3
4
5
6
7
8
9
10
2020.05.25 12:42:24 1: result: [$VAR1 = 'HWR';
$VAR2 = 'Badezimmer';
$VAR3 = 'GaesteWC';
$VAR4 = 'Schlafen';
$VAR5 = 'Wohnzimmer';
$VAR6 = 'Flur';
$VAR7 = 'MiloSchlafen';
$VAR8 = 'Kino';
$VAR9 = 'Kueche';
]
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
2020.05.25 12:42:24 1: result: [$VAR1 = [
'Roll.HWR'
];
$VAR2 = [
'Roll.BadDach',
'Roll.BadGiebel'
];
$VAR3 = [
'Roll.GaesteWC'
];
$VAR4 = [
'Roll.Schlafen'
];
$VAR5 = [
'Roll.WohnzimmerFensterDoert',
'Roll.WohnzimmerSonnenterrasse',
'Roll.WohnzimmerStrasseLinks',
'Roll.WohnzimmerStrasseRechts',
'Roll.WohnzimmerTerrasseGarten'
];
$VAR6 = [
'Roll.Flur'
];
$VAR7 = [
'Roll.MiloSchlafen'
];
$VAR8 = [
'Roll.KinoVorne'
];
$VAR9 = [
'Roll.Kueche'
];
2020-05-25T10:34:07 derPerlwerkerABer der grundsätzliche Aufbau des hash unterscheidet sich schon von deinem.
1
2
3
4
#Ausgabe aller Rollläden
foreach my $roll (keys %hash){
push (@rollListe, @{ $hash{$roll}})
}
Guest TomHallo,
ich habe ein %hash :
Wohnen -> Roll1,
Wohnen -> Roll2,
Wohnen -> Roll3,
Bad -> Roll4,
HWR -> Roll5
Wohnen -> Roll6
$hash{Wohnen} = "Roll6";