simonuca has asked for the wisdom of the Perl Monks concerning the following question:
and i wanto to put de 2th column of file1 into 2th column of file2, if 1st column of file1 is equal to the 1st column of file2, and put the result in a new file. Thanks for your help! The .pl im tryng to do the job is: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: ...
Keep it cool!#!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 = <rut_benf>) { @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 ( <f1> ) #Loop que procesa el archivo "datoscec.txt" completo { $a = <f1>; #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 <f2> es para Pensionado, para <f5> 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 = <temp1>; 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__
Edited:
~Fri Jul 12 20:19:57 2002 (GMT),
by footpad:
Added <readmore> tag, per Consideration.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
(jeffa) Re: Problems getting a file with information of two diferent ones
by jeffa (Bishop) on Jul 12, 2002 at 16:21 UTC |