-#!/usr/bin/perl -w
+#!/usr/bin/perl
use strict;
-# Recibo los parametros de la linea de comando e inicializo
-# las variables generales
+my $origen = shift;
+my $destino = shift;
+open web020, "< ".$origen."/web020";
+open web020_corregido, "> ".$destino."/web020";
-if(!$ARGV[0] || !$ARGV[1])
+my $registro = <web020>;
+print web020_corregido $registro;
+$registro = <web020>;
+while ($registro)
{
- print "No me pasaste los parametros adecuados\nuso\nweb020.pl origen destino";
- exit;
-}
-
-my $origen=$ARGV[0];
-my $destino=$ARGV[1];
-my $arch_salida="$destino/web020";
-my $arch_entrada="$origen/web020";
-my $linea;
-my @datos_linea_anterior;
-my $contador;
-
-# Archivos de entrada y salida
-open arch_ent, "<$arch_entrada";
-open arch_sal, ">$arch_salida";
-
-# Leo el encabezado
-$linea=<arch_ent>;
-
-# Grabo el encabezado en el archivo de salida
-print arch_sal $linea;
-
-my @linea_anterior=(0,0,'nada',0);
-my @campos;
-
-# Leo la cantidad de lineas del archivo de entrada
-my $aux;
-$aux=`wc -l $arch_entrada`;
-($aux)=$aux=~/\s(\d*)\s/;
-# Bucle que recorre el archivo de entrada linea por linea
-for ($contador = $aux ;$contador > 0 ; $contador --)
-{
- $linea=<arch_ent> unless ($contador == 1);
- @campos=split(",",$linea);
-
- if( $linea_anterior[0] eq $campos[0] and
- $linea_anterior[1] eq $campos[1] and
- $linea_anterior[2] eq $campos[2] and
- $linea_anterior[3] eq $campos[3])
+ my @campos = split(",",$registro);
+ my %agente = ();
+ my %nov = ();
+ $agente{'nrodoc'} = $campos[3];
+ while ($agente{'nrodoc'} == $campos[3] and $registro)
{
- my $dias;
- $dias=0;
- foreach my $item (1..31)
+ my $anio = $campos[0];
+ my $mes = $campos[1];
+ my $novedad = $campos[2];
+ if (!defined($nov{$novedad}->{$anio}->{$mes}))
+ {
+ foreach my $dia (1..31)
+ {
+ $dia = "0".$dia if($dia < 10);
+ $nov{$novedad}->{$anio}->{$mes}->{$dia} = $campos[$dia+3];
+ }
+ }else
{
- if( $linea_anterior[3+$item] ne "00" or
- $campos[3+$item] ne "00")
+ foreach my $nov_dia (1..31)
{
- $campos[3+$item]="01";
- $dias++;
+ $nov_dia = "0".$nov_dia if($nov_dia < 10);
+ if($campos[$nov_dia+3] ne "00") {$nov{$novedad}->{$anio}->{$mes}->{$nov_dia}="01"};
}
}
- $campos[35]=$dias;
- }else
+ $registro = <web020>;
+ if($registro) {@campos = split(",",$registro);}
+ }
+ foreach my $novedad (sort(keys(%nov)))
{
- if( $linea_anterior[0] and
- $linea_anterior[1] and
- $linea_anterior[2])
+ foreach my $anio (sort(keys(%{$nov{$novedad}})))
{
- print arch_sal $linea_anterior[$_]."," foreach (0..35);
- print arch_sal "\n";
- }else
- {
- if($contador < $aux)
+ foreach my $mes (sort(keys(%{$nov{$novedad}->{$anio}})))
{
- my $linea_archivo;
- $linea_archivo = $aux - $contador + 1;
- print "Error en la linea ".$linea_archivo.": ";
- print $linea_anterior[$_]."," foreach (0..35);
- print "\n";
+ print web020_corregido $anio.",".$mes.",".$novedad.",".$agente{'nrodoc'}.",";
+ my $total = 0;
+ my $chequeo = 0;
+ foreach my $dia (sort(keys(%{$nov{$novedad}->{$anio}->{$mes}})))
+ {
+ print web020_corregido $nov{$novedad}->{$anio}->{$mes}->{$dia}.",";
+ $total++ if($nov{$novedad}->{$anio}->{$mes}->{$dia} > 0);
+ }
+ print web020_corregido $total."\n";
}
}
}
-
- @linea_anterior=@campos;
}
-print arch_sal $linea_anterior[$_]."," foreach (0..35);
-print arch_sal "\n";
-
-close arch_ent;
-close arch_sal;
-