#!/usr/local/bin/perl use Modern::Perl; use autodie; use XML::Twig; use File::Basename; use Data::Dumper; my $arg_file = shift @ARGV; my $default_file = 'default_sysvalue.xml'; my @files = glob('*.xml'); @files = grep { $_ ne $arg_file } @files if defined $arg_file; my $result_file = 'DATA.csv'; sub timestamp { my $i; return sprintf "%04d%02d%02d %02d:%02d:%02d", map {$_ + (1900,1,0,0,0,0)[$i++]} reverse ((localtime)[0..5]); } my $sep_char = ";"; my $uuid = '3F56E1C5-D6B9-1014-9A88-CDB8776B8231'; my %defaults; $defaults{$uuid} = []; my $default_twig = XML::Twig->new( twig_handlers => { 'Parameter' => sub { my $cat_id = @{$defaults{$uuid}}[-1]; my $name = $_->{'att'}->{'name'}; my $target = $_->first_child('Target'); if ($name ne "" ) { if ($target) { $name = $target->{'att'}->{'instance'}. '--' . $name ; } push @{$defaults{$cat_id}{$uuid}}, $name; $defaults{$cat_id}{$name} = $_->{'att'}->{'value'} // 'fault';}}}, start_tag_handlers => { 'Catalog' => sub { my $cat_id = $_->{'att'}->{'id'}; push @{$defaults{$uuid}}, $cat_id; $defaults{$cat_id}{$uuid} = [];} }); $default_twig->parsefile($default_file); open my $fhout, ">", $result_file; print $fhout timestamp(), "\n"; print $fhout ((split(/_/, basename($default_file)))[0]); foreach my $cat_id (@{$defaults{$uuid}}) { foreach my $name (@{$defaults{$cat_id}{$uuid}}) { print $fhout $sep_char, $name; } } print $fhout "\n"; print $fhout "default"; foreach my $cat_id (@{$defaults{$uuid}}) { foreach my $name (@{$defaults{$cat_id}{$uuid}}) { print $fhout $sep_char, $defaults{$cat_id}{$name}; } } print $fhout "\n"; foreach my $file (@files) { my %datas; $datas{$uuid} = []; my $datas_twig = XML::Twig->new( twig_handlers => { 'Parameter' => sub { my $cat_id = @{$datas{$uuid}}[-1]; my $name = $_->{'att'}->{'name'}; my $target = $_->first_child('Target'); if ($name ne "" ) { if ($target) { $name = $target->{'att'}->{'instance'}. '--' . $name ; } push @{$datas{$cat_id}{$uuid}}, $name; $datas{$cat_id}{$name} = $_->{'att'}->{'value'} // 'fault';}}}, start_tag_handlers => { 'Catalog' => sub { my $cat_id = $_->{'att'}->{'id'}; push @{$datas{$uuid}}, $cat_id; $datas{$cat_id}{$uuid} = [];} }); $datas_twig->parsefile($file); print $fhout (split(/_/, ((split(/\./, basename($file)))[0])))[0]; foreach my $cat_id (@{$defaults{$uuid}}) { foreach my $name (@{$defaults{$cat_id}{$uuid}}) { print $fhout $sep_char, ($datas{$cat_id}{$name} // 'missing'); } } print $fhout "\n"; } close $fhout;