Para saltar la primera línea, basta con leerla y no hacer nada con ella:
Using perl Syntax Highlighting
<$fh>;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y para quitar las comillas, pues puedes hacerlo después del chomp():
Using perl Syntax Highlighting
s/"//g;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
De todas maneras... te sobran muchas líneas, ¿no?
Aquí hay otra versión, más reducida:
Using perl Syntax Highlighting
#!/usr/bin/perl
use v5.14;
use autodie;
my @datos;
my %datos;
my @fechas;
my $csv_a_procesar = shift # es igual a shift @ARGV
or die "Uso: $0 <nombre de fichero>\n";
open my $fh, "<", $csv_a_procesar;
## Lectura
<$fh>; # cabecera
while (<$fh>) {
chomp; # muerdo el retorno de carro final
s/"//g;
@datos = split /;/; # separo los campos
push @fechas, $datos[1]; # array ordenado de las fechas
$datos{ $datos[1] } = $datos[0];
}
close $fh;
## Salida
open my $fhout, ">", "test.xml";
say $fhout
' <chart showvalue="0" caption="Prueba con poco datos" xaxisname="tiempo" yaxisname="datos" palette="1">';
say $fhout ' <categories>';
for my $date (@fechas) {
say $fhout qq( <category label="$date" />);
}
say $fhout ' </categories>';
say $fhout ' <dataset SeriesName="dato1">';
for my $date (@fechas) {
say $fhout qq( <set value="$datos{$date}" />);
}
say $fhout ' </dataset>';
close $fhout;
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero, yo prefiero esta otra versión:
Using perl Syntax Highlighting
#!/usr/bin/env perl
use autodie;
use Text::CSV::Slurp;
use XML::Simple;
my $csv_a_procesar = shift
or die "Uso: $0 <nombre de fichero>\n";
my $data = Text::CSV::Slurp->load( # Leer archivo CSV
file => $csv_a_procesar,
# quote_char => q["],
sep_char => q[;],
);
my @category;
my @set;
for my $data (@$data) { # $data es una ref. a un array de hashes
push @category, { label => $data->{'Timestamp'} }; # extraemos información,
push @set, { value => $data->{'Value' } }; # y la guardamos en dos arrays
}
my $xml1 = { # cabecera del XML
chart => {
showvalue => 0,
caption => 'Prueba con poco datos',
xaxisname => 'tiempo',
yaxisname => 'datos',
palette => 1,
}
};
my $xml2 = { category => \@category }; # categories
my $xml3 = { # dataset
dataset => {
SeriesName => 'dato1',
set => \@set,
}
};
open my $fhout, ">", "test1.xml"; # salida
print $fhout XMLout($xml1, KeepRoot => 0, RootName => '');
print $fhout XMLout($xml2, RootName => 'categories' );
print $fhout XMLout($xml3, KeepRoot => 1 );
close $fhout;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Sale:
Using xml Syntax Highlighting
<chart caption="Prueba con poco datos" palette="1" showvalue="0" xaxisname="tiempo" yaxisname="datos" />
<categories>
<category label="25/09/2012 12:00:00" />
<category label="25/09/2012 11:30:00" />
<category label="25/09/2012 11:00:00" />
<category label="25/09/2012 10:30:00" />
<category label="25/09/2012 10:00:00" />
</categories>
<dataset SeriesName="dato1">
<set value="36,63" />
<set value="43,47" />
<set value="39,96" />
<set value="39,66" />
<set value="38,54" />
</dataset>
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
De todas maneras, me parece que estás generando mal el XML... ¿no debería <chart> encerrar a todo el archivo, en lugar de aparecer solo en la primera línea? (Dicho de otro modo, debería existir un
</chart> al final.)