por sufisavey80 » 2014-04-09 17:13 @759
¿Qué tal...? Muy buenas tardes.
De nuevo con este tema de transponer. Quisiera saber si me pueden apoyar ya que estoy utilizando el código relacionado a este tema y necesita añadir en el archivo de salida los encabezados >>MXP >>USD >>UDI correspondientes a cada línea del archivo de entrada, pero el resultado no es el esperado sobre estos encabezados específicamente ya que imprime el último encontrado (de >>MXP >>USD >>UDI) por cada fecha.
Adjunto los archivos ejemplo de entrada (Rep_PnL_X_Mon_SP.csv) y salida (Reporte_PnL_X_Mon_SP.csv)
¡Muchas gracias!
---------------------------------------------------------------------------------------
#!/usr/bin/perl
#use v5.8.4;
#use autodie;
my %transacciones;
my $contenido;
my $encabezado;
#my $fecha = time ();
open my $entrada, '<:crlf', '/herramientas/Algorithmics/riesgos_m/riesgos_p/20140331/riskwatch/reports/Rep_PnL_X_Mon_SP.csv'; # es de tipo MSDOS
while (<$entrada>) {
next if /(^Reporte|Instrument|Cash)/; # saltamos las lineas no interesantes
chomp; # quitamos fin de linea
my @campos = split /[,]/; # partimos
next if @campos != 4; # comprobamos que son 4 campos
my($fecha, $tipo, undef, $valor) = @campos;
$transacciones{ $fecha }{ $tipo } = $valor; # guardamos el dato
}
close $entrada;
#use Data::Dumper;
#say Dumper \%transacciones;
my @cabeceras = qw(
Pensiones >>MXP PBG >>MXP PBGVto >>MXP PBGMdo >>UDI
Seguros >>MXP PIB >>MXP SBG >>MXP SBGVto >>MXP SBGMdo >>MXP SBGMNoVida >>NXP SBGMVida
PBGVOtro >>UDI >>MXP PBGVRva >>UDI >>MXP SBGVVida >>UDI >>MXP SBGVNoVida >>USD >>UDI >>MXP
SEGPATR >>USD >>UDI >>MXP SEGPAVC >>UDI >>MXP SEGPAVE >>UDI >>MXP SEGPAVM >>UDI >>MXP SEGPAS >>UDI >>MXP SEGCREC
);
open my $salida, '>:crlf', '/herramientas/Algorithmics/riesgos_m/riesgos_p/20140331/riskwatch/reports/Reporte_PnL_X_Mon_SP.csv'; # salida en formato MSDOS
$encabezado = join q[,], "", @cabeceras; # cabeceras en salida
print $salida "Reporte: Reporte_PnL_X_Mon_SP.csv\n\n\n";
#print $salida $fecha;
print $salida $encabezado."\n";
for my $fecha (reverse sort keys %transacciones) { # salida de fechas en orden alfabético inverso
$contenido = join q[,], $fecha, map { defined($transacciones{$fecha}{$_}) ? $transacciones{$fecha}{$_} : '' } @cabeceras;
print $salida $contenido."\n";
}
close $salida;
- Adjuntos
-
- Reporte_PnL_X_Mon_SP.csv
- Archivo Salida
- (3.21 KiB) 76 veces
-
- Rep_PnL_X_Mon_SP.csv
- Archivo Entrada
- (20.1 KiB) 83 veces