Thread values eines Hash durch ein array filtern (Daten von FHEM) (13 answers)
Opened by Tom at 2020-05-24 13:04

GwenDragon
 2020-05-24 14:25
#191837 #191837
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Sieht nach Homeautomation mit Perl aus ;) Stimmt's?

Ich nehme mal an, du kennst Perl schon? Wenn nicht, wenn's also im nachfolgenden unverständlich, frage bitte.
Ich babe nicht ganz verstanden wie die Daten bei dir ankommen, korrigiere mich, wenn nötig.

Code (perl): (dl )
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


Erzeugt bei mir dann:

$VAR1 = [
'Wohnen -> Roll1',
'Wohnen -> Roll2',
'Wohnen -> Roll3',
'Bad -> Roll4',
'HWR -> Roll5',
'Wohnen -> Roll6'
];

$VAR1 = {
'Wohnen' => [
'Roll1',
'Roll2',
'Roll3',
'Roll6'
],
'Bad' => [
'Roll4'
],
'HWR' => [
'Roll5'
]
};

Last edited: 2020-05-24 14:30:56 +0200 (CEST)

View full thread values eines Hash durch ein array filtern (Daten von FHEM)