file1 000101 : 50112487-7 : MANUEL : JARA : DIAZ 000104 : 50112488-5 : SILVIA : PAGLIOHI : IBARRA 000106 : 50112489-3 : LUCIA : GALLO : SILVA 000106 : 50112490-7 : ALEJANDRA : SILVA : GALLO 000106 : 50112491-5 : CARLOS : SILVA : GALLO 000106 : 50112492-3 : PAULINA : SILVA : GALLO 000107 : 50112493-1 : SUSANA : ORREGO : CARVAJAL 000107 : 50112494-0 : INGRID : FUENTES : ORREGO ... file2 000101: 3: 1-9: 000101: 3: 1-9: 000101: 3: 1-9: 000101: 3: 1-9: 000101: 3: 1-9: 000102: 2: 3849780-4: 000102: 2: 3849780-4: 000103: 2: 3287890-3: ... #### #!c:\perl\bin\perl.exe ################################# #script rellenar datos cotizador# #en archivo cotzcec.txt # #Por: Simon Zlachevsky P. # # Ingeniero Civil Industrial# # PUC # ################################# ################################# #Abriendo archivos necesarios # ################################# open temporal1, "> tmp"; close temporal1; open datos1, "c:/textoplano/Certificados/datoscertificados.txt"; open +f3, ">> tmp"; open cotz1, "c:/textoplano/Certificados/Archivopaso_certificados.txt"; + close cotz1; open rute_benef, "c:/textoplano/Certificados/rut_certificados.txt"; open f1, "c:/textoplano/Certificados/datoscertificados.txt"; ################################################################## #Función cambio formato fecha de dd-MMM-aa a dd-mm-aaaa # ################################################################## sub cambio_fecha { my $f = shift; @f = split /-/ , $f; if ($f[1] eq "JAN"){$f[1]="01";} if ($f[1] eq "FEB"){$f[1]="02";} if ($f[1] eq "MAR"){$f[1]="03";} if ($f[1] eq "APR"){$f[1]="04";} if ($f[1] eq "MAY"){$f[1]="05";} if ($f[1] eq "JUN"){$f[1]="06";} if ($f[1] eq "JUL"){$f[1]="07";} if ($f[1] eq "AUG"){$f[1]="08";} if ($f[1] eq "SEP"){$f[1]="09";} if ($f[1] eq "OCT"){$f[1]="10";} if ($f[1] eq "NOV"){$f[1]="11";} if ($f[1] eq "DEC"){$f[1]="12";} if ($f[2] <= 9){$f[2] = "20" . $f[2];}else {$f[2] = "19" . $f[2];} return($f[0] . "-" . $f[1] . "-" . $f[2]); } ############################################ #Función cambio a código CNS documentos CNA# ############################################ sub coddocumento { my $d = shift; uc($d); if($d eq "TERMINOCARGAPOREDAD24AGNOS"){$codigo="";} elsif($d eq "TERMINACARGAFAMILIAR"){$codigo="";} elsif($d eq "RETROACTIVOSMANUALESCARGAFAMILIAR"){$codigo="";} elsif($d eq "CERTIFICADOESTUDIOS2SEMESTRE"){$codigo="04";} elsif($d eq "CERTIFICADOESTUDIOSPRIMERSEMESTRE"){$codigo="04";} elsif($d eq "CERTIFICADOESTUDIOSANUAL"){$codigo="04";} elsif($d eq "CERTIFICADOESTUDIOSFLEXIBLE"){$codigo="04";} elsif($d eq "CREA/HABILITACARGAFAMILIAR"){$codigo="17";} return($codigo); } ############################## #Función COD_REGIMEN_ESTUDIO # ############################## sub codregest { my $e = shift; uc($e); if($e eq "TERMINOCARGAPOREDAD24AGNOS"){$regest="";} elsif($e eq "TERMINACARGAFAMILIAR"){$regest="";} elsif($e eq "RETROACTIVOSMANUALESCARGAFAMILIAR"){$regest="";} elsif($e eq "CERTIFICADOESTUDIOS2SEMESTRE"){$regest="02";} elsif($e eq "CERTIFICADOESTUDIOSPRIMERSEMESTRE"){$regest="02";} elsif($e eq "CERTIFICADOESTUDIOSANUAL"){$regest="01";} elsif($e eq "CERTIFICADOESTUDIOSFLEXIBLE"){$regest="02";} elsif($e eq "CREA/HABILITACARGAFAMILIAR"){$regest="";} return($regest); } ################################### #Función Rescate RUT beneficiario # ################################### sub rutbenef { my $f = shift; uc($f); my $rutb; my $linea; my $n1=0; while ($linea = ) { @linea = split /:/ , $linea; for (1..3){ $linea[$n1] =~ s/ *//g; $linea[$n1] =~ s/^0/0/; $line +a[$n1] =~ s/ \n//; $n1=$n1+1;} if($f == $linea[0]) { $rutb = $linea[1]; } else { &rutbenef($f); } } return($rutb); } ###################################################################### +############### #Procesando Archivo datoscec.txt que contiene la lista causantes y sus + beneficiarios# ###################################################################### +############### my $nfolio=999; #Variable que genera un numero de folio a parti +r del mil #para todas las rentas adicionales. while ( ) #Loop que procesa el archivo "datoscec.txt" completo { $a = ; #Asignacion de archivo a variable local, para poder man +ejar cada #linea como un arreglo de objetos (palabras, numeros, e +tc) ###################################################################### +############## #Separando en un arreglo los contenidos de un cusante o beneficiario p +ara c/columna# ###################################################################### +############## @a = split /:/ , $a; #Arreglo de los contenidos de la linea en $a my $n1=0; #Variable local (contador al loop) ###################################################################### +## #Separando en un arreglo los contenidos de rut asignados para c/column +a# ###################################################################### +## ###################################################################### +############ #Sacando los return para poder insertar el dato correspondiente, luego + se agrega # #el \n en el caso es para Pensionado, para es para los benef +iciarios # ###################################################################### +############ for (1..10) { $a[$n1] =~ s/ *//g; #limpiando caracteres sobrantes $a[$n1] =~ s/^0/0/; #limpiando caracteres sobrantes $a[$n1] =~ s/ \n//; #limpiando caracteres sobrantes $n1=$n1+1; } ########################################################### #Verificando si rut corresponde a titular # ########################################################### if($a[2] eq "1-9" && $a[1] ne "1"){$a[2]=&rutbenef($a[0]);} ################# #Quitando el DV # ################# my $dv; @dv = split /-/ , $a[2]; $a[2]=$dv[0]; ############################################################ #Imprimiendo datos por RUT Persona # ############################################################ $codigos = $a[3]; if ($a[0] != $poliza) {$nfolio++;} print f3 $nfolio . ","; print f3 "0,"; print f3 ","; print f3 $a[2] . ","; #coloco * en este campo para lueg +o reemplazarlo con el rut correspondiente al beneficiario print f3 &coddocumento($codigos) . ","; #si el beneficiario es el +mismo (mismop numero de beneficiario, este se repetira la cantidad print f3 &codregest($codigos) . ","; #de documentos presentados + por el print f3 "S,"; print f3 &cambio_fecha($a[6]) . ","; print f3 &cambio_fecha($a[6]) . ","; print f3 "S,"; print f3 &cambio_fecha($a[6]) . ","; print f3 &cambio_fecha($a[6]) . ","; print f3 &cambio_fecha($a[7]); print f3 "\n"; }continue { $poliza=$a[0]; } close f3; #Cerrando archivo tmp open temp1, "tmp"; #Abriendo archivo tmp para vaciarlo en archivo c +otzcec.txt (resultado del programa) @tmp = ; close f1; #Cerrando archivo datoscec.txt open f4, "> c:/textoplano/Certificados/Archivopaso_certificados.txt"; ######################################### #Todo el archivo procesado queda en cotz# ######################################### print f4 @tmp; #Volcando datos close f4; #Cerrando archivo cotzcec.txt close temp1; #Cerrando archivo tmp close datos1; #Cerrando archivo datoscec.txt __END__