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

topeg
 2011-06-28 11:26
#150013 #150013
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Verstehe ich es richtig, das der String, der zurück kommt, etwas wie perl aussieht?
Wenn dem so ist hast du zwei Möglichkeiten das zu Parsen:
more (16.6kb):

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

# Daten lesen ...
my $str=join('',<DATA>);


my %data=();
# unsichere einfache Variante mit eval:
if($str =~ m!\[\@Liste\](.+)\[/Liste\]!is)
{
  my @queryColumns;
  my @queryData;
  eval($1);
  die("PARSE ERROR $@") if($@);
  for my $d (@queryData)
  { push(@{$data{$queryColumns[$_]}},$d->[$_]) for (0..$#$d); }
}
print Dumper(\%data);

########################################################################

%data=();
# sichere Variante über einen Parser:
if($str =~ m!\[\@Liste\](.+)\[/Liste\]!is)
{
  my @queryColumns;
  my @queryData;
  my $str=$1;
  if($str=~m!queryColumns\s*=\s*\(((?:\s*'[^']*',?\s*)+)\);!s)
  { @queryColumns=map{$_=~s/^\s*'//s; $_=~s/'\s*$//s; $_}split(/\s*,\s*/s,$1); }
  else
  { die("NO queryColumns Found!\n "); }
  if($str=~m!queryData\s*=\s*\((.+?)\);!s)
  {
    my $str=$1;
    while($str=~s/\n\s+\[((?:\s*'[^']*',?\s*)+)\n\s+\],?//s)
    { push(@queryData,[map{$_=~s/^\s*'//s; $_=~s/'\s*$//s; $_}split(/\s*,\s*/s,$1)]); }
  }
  else
  { die("NO queryData Found!\n "); }

  for my $d (@queryData)
  { push(@{$data{$queryColumns[$_]}},$d->[$_]) for (0..$#$d); }
}
print Dumper(\%data);

########################################################################

__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',
    '191.222.33.127',
    '191.222.33.127',
    '',
    'Test 2',
    'Normal',
    'Unknown',
  ],

  [
    '3',
    '176.193.1.7',
    '176.193.1.7',
    '',
    'Test 3',
    'Normal',
    'Unknown',
  ],
);
[/Liste]

Last edited: 2011-06-28 11:46:14 +0200 (CEST)

View full thread Hash/Array aus Liste erzeugen