Forums Neueste Beiträge
 

XML::Simple ergebnis verarbeiten

15/12/2008 - 14:48 von Gerhard Wolf | Report spam
Hallo,

in diesem Script weis ich nicht wie ich
$ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE}
weiter verarbeiten kann. Dumper gibt ein array aus s.u.
Ich kann auch mit print
$ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE}[0]
ein Element ausgeben. Die Zeile einem Array zuweisen:
my @liste = $ref->{q. liefert kein mit z.B. for durchlauffàhiges array.
Wie komm ich in einer Schleife an die Dateinamen (FILENAME) ??


#!usr/bin/perl -w
use warnings;
use strict;
use Win32::Shortcut;
use XML::Simple qw(:strict);
use Data::Dumper;

my $bds_proj = bdsproj_ermitteln();



if ($bds_proj) {
my $ref = XMLin($bds_proj, ForceArray => 1, KeyAttr => [ ]);
print Dumper($ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE});
}

sub bdsproj_ermitteln {
my $PROJEKT_DATEI_MUSTER="*.bdsproj";
my @projekt_datei = glob($PROJEKT_DATEI_MUSTER);
if ($#projekt_datei == -1) {
return -1;
}
else {
return $projekt_datei[0];
}
}
-
$VAR1 = [
{
'UNITNAME' => 'RME',
'DESIGNCLASS' => '',
'FORMNAME' => '',
'LOCALCOMMAND' => '',
'FILENAME' => 'RME.cpp',
'CONTAINERID' => 'CCompiler'
},
{
'UNITNAME' => 'RME.res',
'DESIGNCLASS' => '',
'FORMNAME' => '',
'LOCALCOMMAND' => '',
'FILENAME' => 'RME.res',
'CONTAINERID' => 'ResTool'
},
{
'UNITNAME' => 'Main',
'ADDITIONAL' => 'Main.h',
'DESIGNCLASS' => '',
'FORMNAME' => 'Form1',
'LOCALCOMMAND' => '',
'FILENAME' => 'Main.cpp',
'CONTAINERID' => 'CCompiler'
},

...];
 

Lesen sie die antworten

#1 Martin Vorlaender
15/12/2008 - 18:04 | Warnen spam
Gerhard Wolf wrote:
in diesem Script weis ich nicht wie ich
$ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE}
weiter verarbeiten kann. Dumper gibt ein array aus s.u.
Ich kann auch mit print
$ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE}[0]
ein Element ausgeben. Die Zeile einem Array zuweisen:
my @liste = $ref->{q. liefert kein mit z.B. for durchlauffàhiges array.
Wie komm ich in einer Schleife an die Dateinamen (FILENAME) ??



$ref->...{FILE} ist eine Array-Referenz - das zugehörige Array bekommst Du
mit @{$ref->...{FILE}}. Und die FILENAMEs sind erst einmal Hash-Elemente;
um sie aus dem Array zu extrahieren, musst Du das Hash-Element mit dem
Key FILENAME herausziehen. Also z.B.

for my $filename (map { $_->{FILENAME} } @{$ref->...{FILE}})

HTH,
Martin



#!usr/bin/perl -w
use warnings;
use strict;
use Win32::Shortcut;
use XML::Simple qw(:strict);
use Data::Dumper;

my $bds_proj = bdsproj_ermitteln();



if ($bds_proj) {
my $ref = XMLin($bds_proj, ForceArray => 1, KeyAttr => [ ]);
print Dumper($ref->{q
[CPlusPlusBuilder.Personality]}[0]->{BCBPROJECT}[0]->{FILELIST}[0]->{FILE});
}

sub bdsproj_ermitteln {
my $PROJEKT_DATEI_MUSTER="*.bdsproj";
my @projekt_datei = glob($PROJEKT_DATEI_MUSTER);
if ($#projekt_datei == -1) {
return -1;
}
else {
return $projekt_datei[0];
}
}
-
$VAR1 = [
{
'UNITNAME' => 'RME',
'DESIGNCLASS' => '',
'FORMNAME' => '',
'LOCALCOMMAND' => '',
'FILENAME' => 'RME.cpp',
'CONTAINERID' => 'CCompiler'
},
{
'UNITNAME' => 'RME.res',
'DESIGNCLASS' => '',
'FORMNAME' => '',
'LOCALCOMMAND' => '',
'FILENAME' => 'RME.res',
'CONTAINERID' => 'ResTool'
},
{
'UNITNAME' => 'Main',
'ADDITIONAL' => 'Main.h',
'DESIGNCLASS' => '',
'FORMNAME' => 'Form1',
'LOCALCOMMAND' => '',
'FILENAME' => 'Main.cpp',
'CONTAINERID' => 'CCompiler'
},

...];






One OS to rule them all | Martin Vorlaender | OpenVMS rules!
One OS to find them | work:
One OS to bring them all | http://vms.pdv-systeme.de/users/martinv/
And in the Darkness bind them.| home:

Ähnliche fragen