Thread Hash/Array aus Liste erzeugen (8 answers)
Opened by mgsyslog at 2011-06-27 15:16

payx
 2011-06-28 10:15
#150007 #150007
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo mgsyslog,

den CPAN:Data::Dumper habe ich nur mitgegeben, damit das Ergebnis sichtbar wird.

Wenn die Daten wirklich immer so sauber geliefert werden wie im Beispiel, dann sollte die Zuweisung per eval() möglich sein.

Bsp.:
more (11.1kb):
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

#Variablen definieren (erforderlich bei strict)
my @queryColumns;
my @queryData;

#Daten aus File (hier: s.u. ab __DATA__ ) einlesen
my @data = <DATA>;
#Erste und letzte Zeile entfernen (hauruck-Lösung)
shift @data;
pop @data;

#Daten als Programmcode verarbeiten.
eval("@data") or die $!;

#Die Zieldatenstruktur: Ein Array of Hashes
my @aoh;

#Zeilenweise durch @queryData
for my $i (0..$#queryData) {
    #Eine Tabellenzeile als Array
    my @rowArr = @{$queryData[$i]};
    #Definiere Hash für eine Tabellenzeile
    my %rowHash;
    #Spaltenweise durch eine Tabellenzeile
    for my $j (0..$#rowArr) {
        #Spaltenname
        my $column = $queryColumns[$j];
        #Wert
        my $value = $rowArr[$j];
        #Zuordnung vom Wert zum Spaltenname
        $rowHash{$column}=$value;
    }
    #In die Zieldatenstruktur für jede Zeile ein Hashref
    push @aoh, \%rowHash;
}

print Dumper \@aoh;

#Die Daten, die natürlich auch aus einem File kommen könnten
__DATA__
[@Liste]
@queryColumns = (
    'objId',
    'objName',
    'objFullName',
    'objDescription',
    'objType',
    'objStatus',
    'objPerfStatus'
);

@queryData = (
    [
        '1',
        '193.111.44.137',
        '193.111.44.137',
        '',
        'Mgmt Station',
        'Normal',
        'Unknown'
    ],
    [
        '2',
        '193.111.44.138',
        '193.111.44.138',
        '',
        'Gas Station',
        'Super',
        'Well known'
    ]
);
[/Liste]

Besonders solide kommt mir das aber nicht vor. Wahrscheinlich kommen noch bessere Vorschläge.

Grüße
payx
Last edited: 2011-06-28 10:17:31 +0200 (CEST)

View full thread Hash/Array aus Liste erzeugen