Thread Hash/Array aus Liste erzeugen
(8 answers)
Opened by mgsyslog at 2011-06-27 15:16
Hallo mgsyslog,
den 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.: 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) |