Tengo un código que me permite recorrer un archivo y a partir de éste generar otros archivos distintos; esto lo hago así porque el archivo original contiene registros por hora de todo un día pero necesito que éstos estén en archivos distintos.
El código es el siguiente:
Using perl Syntax Highlighting
- #!/usr/bin/env perl
- my $nombre_arch_fuen2 = "/home/scadmin/data_M2000/PDP/PDP_2016-01-21 00\:00_2016-01-22 00\:00.csv";# aca escribo manualmente el nombre del archivo que quiero dividir
- my $nom1 = substr($nombre_arch_fuen2,29,3);
- my $nom2 = substr($nombre_arch_fuen2,32,12);
- my $nom3 = substr($nombre_arch_fuen2,49,12);
- my $S1 = $nom1.$nom2."00\:00".$nom2."01\:00.csv";
- my $S2 = $nom1.$nom2."01\:00".$nom2."02\:00.csv";
- my $S3 = $nom1.$nom2."02\:00".$nom2."03\:00.csv";
- my $S4 = $nom1.$nom2."03\:00".$nom2."04\:00.csv";
- my $S5 = $nom1.$nom2."04\:00".$nom2."05\:00.csv";
- my $S6 = $nom1.$nom2."05\:00".$nom2."06\:00.csv";
- my $S7 = $nom1.$nom2."06\:00".$nom2."07\:00.csv";
- my $S8 = $nom1.$nom2."07\:00".$nom2."08\:00.csv";
- my $S9 = $nom1.$nom2."08\:00".$nom2."09\:00.csv";
- my $S10 = $nom1.$nom2."09\:00".$nom2."10\:00.csv";
- my $S11 = $nom1.$nom2."10\:00".$nom2."11\:00.csv";
- my $S12 = $nom1.$nom2."11\:00".$nom2."12\:00.csv";
- my $S13 = $nom1.$nom2."12\:00".$nom2."13\:00.csv";
- my $S14 = $nom1.$nom2."13\:00".$nom2."14\:00.csv";
- my $S15 = $nom1.$nom2."14\:00".$nom2."15\:00.csv";
- my $S16 = $nom1.$nom2."15\:00".$nom2."16\:00.csv";
- my $S17 = $nom1.$nom2."16\:00".$nom2."17\:00.csv";
- my $S18 = $nom1.$nom2."17\:00".$nom2."18\:00.csv";
- my $S19 = $nom1.$nom2."18\:00".$nom2."19\:00.csv";
- my $S20 = $nom1.$nom2."19\:00".$nom2."20\:00.csv";
- my $S21 = $nom1.$nom2."20\:00".$nom2."21\:00.csv";
- my $S22 = $nom1.$nom2."21\:00".$nom2."22\:00.csv";
- my $S23 = $nom1.$nom2."22\:00".$nom2."23\:00.csv";
- my $S24 = $nom1.$nom2."23\:00".$nom3."00\:00.csv";
- open my $FORMAT_FONT, '<', $nombre_arch_fuen2;
- open my $FD1, '>', $S1;
- open my $FD2, '>', $S2;
- open my $FD3, '>', $S3;
- open my $FD4, '>', $S4;
- open my $FD5, '>', $S5;
- open my $FD6, '>', $S6;
- open my $FD7, '>', $S7;
- open my $FD8, '>', $S8;
- open my $FD9, '>', $S9;
- open my $FD10, '>', $S10;
- open my $FD11, '>', $S11;
- open my $FD12, '>', $S12;
- open my $FD13, '>', $S13;
- open my $FD14, '>', $S14;
- open my $FD15, '>', $S15;
- open my $FD16, '>', $S16;
- open my $FD17, '>', $S17;
- open my $FD18, '>', $S18;
- open my $FD19, '>', $S19;
- open my $FD20, '>', $S20;
- open my $FD21, '>', $S21;
- open my $FD22, '>', $S22;
- open my $FD23, '>', $S23;
- open my $FD24, '>', $S24;
- chmod 0777, $S1;
- chmod 0777, $S2;
- chmod 0777, $S3;
- chmod 0777, $S4;
- chmod 0777, $S5;
- chmod 0777, $S6;
- chmod 0777, $S7;
- chmod 0777, $S8;
- chmod 0777, $S9;
- chmod 0777, $S10;
- chmod 0777, $S11;
- chmod 0777, $S12;
- chmod 0777, $S13;
- chmod 0777, $S14;
- chmod 0777, $S15;
- chmod 0777, $S16;
- chmod 0777, $S17;
- chmod 0777, $S18;
- chmod 0777, $S19;
- chmod 0777, $S20;
- chmod 0777, $S21;
- chmod 0777, $S22;
- chmod 0777, $S23;
- chmod 0777, $S24;
- # agrego una cabecera a cada uno
- print $FD1 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD2 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD3 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD4 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD5 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD6 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD7 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD8 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD9 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD10 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD11 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD12 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD13 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD14 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD15 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD16 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD17 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD18 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD19 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD20 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD21 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD22 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD23 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD24 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- my $i = 0 ;
- # extraigo el contenido del original y según sea el registro de la hora lo mando al archivo correspondiente
- while (my $registro = <$FORMAT_FONT>){
- next if $. == 1 ;
- my @campos = quotewords (",",0, $registro ) ;
- $campos[1] = qq("$campos[1]");
- my $fecha = substr ($campos[0],11,2);
- my $ini = substr($campos[0],0,14);
- $campos[0] = $ini."01";
- given ( $fecha )
- {
- when ( '00'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD1 "$archivo_final";
- }
- when ( '01'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD2 "$archivo_final";
- }
- when ( '02'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD3 "$archivo_final";
- }
- when ( '03'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD4 "$archivo_final";
- }
- when ( '04'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD5 "$archivo_final";
- }
- when ( '05'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD6 "$archivo_final";
- }
- when ( '06'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD7 "$archivo_final";
- }
- when ( '07'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD8 "$archivo_final";
- }
- when ( '08'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD9 "$archivo_final";
- }
- when ( '09'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD10 "$archivo_final";
- }
- when ( '10'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD11 "$archivo_final";
- }
- when ( '11'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD12 "$archivo_final";
- }
- when ( '12'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD13 "$archivo_final";
- }
- when ( '13'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD14 "$archivo_final";
- }
- when ( '14'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD15 "$archivo_final";
- }
- when ( '15'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD16 "$archivo_final";
- }
- when ( '16'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD17 "$archivo_final";
- }
- when ( '17'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD18 "$archivo_final";
- }
- when ( '18'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD19 "$archivo_final";
- }
- when ( '19'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD20 "$archivo_final";
- }
- when ( '20'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD21 "$archivo_final";
- }
- when ( '21'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD22 "$archivo_final";
- }
- when ( '22'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD23 "$archivo_final";
- }
- when ( '23'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD24 "$archivo_final";
- }
- }
- $i++;
- }
- close $FORMAT_FONT;
- close $S1;
- close $S2;
- close $S3;
- close $S4;
- close $S5;
- close $S6;
- close $S7;
- close $S8;
- close $S9;
- close $S10;
- close $S11;
- close $S12;
- close $S13;
- close $S14;
- close $S15;
- close $S16;
- close $S17;
- close $S18;
- close $S19;
- close $S20;
- close $S21;
- close $S22;
- close $S23;
- close $S24;
- print "$i \n";
Coloreado en 0.010 segundos, usando GeSHi 1.0.8.4
Bueno hasta ahí todo bien , seguro se puede optimizar ese código pero igual me funciona así.
EL PROBLEMA: es que tengo que aplicar ese código una infinidad de archivos que se encuentran en un directorio y pensé en que este mismo código podía recorrer el directorio y aplicarlo a archivo por archivo.
Por eso le hice unas ligeras modificaciones así:
Using perl Syntax Highlighting
- #!/usr/bin/env perl
- #
- my $dir = "/home/scadmin/data_M2000/prueba/"; # es otro directorio
- my $e = 0 ;
- # abro un opendir para la lectura del directorio
- opendir(DIR,$dir);
- my @FILES = grep(!/^\./,readdir(DIR));
- my $j=0 ;
- foreach $file (@FILES){
- $j++;
- }
- my $e = 0 ;
- while (my $nombre_arch_fuen2 = $FILES[$e])
- {
- my $nom1 = substr($nombre_arch_fuen2,0,3);
- my $nom2 = substr($nombre_arch_fuen2,3,12);
- my $nom3 = substr($nombre_arch_fuen2,20,12);
- my $S1 = $nom1.$nom2."00\:00".$nom2."01\:00.csv";
- my $S2 = $nom1.$nom2."01\:00".$nom2."02\:00.csv";
- my $S3 = $nom1.$nom2."02\:00".$nom2."03\:00.csv";
- my $S4 = $nom1.$nom2."03\:00".$nom2."04\:00.csv";
- my $S5 = $nom1.$nom2."04\:00".$nom2."05\:00.csv";
- my $S6 = $nom1.$nom2."05\:00".$nom2."06\:00.csv";
- my $S7 = $nom1.$nom2."06\:00".$nom2."07\:00.csv";
- my $S8 = $nom1.$nom2."07\:00".$nom2."08\:00.csv";
- my $S9 = $nom1.$nom2."08\:00".$nom2."09\:00.csv";
- my $S10 = $nom1.$nom2."09\:00".$nom2."10\:00.csv";
- my $S11 = $nom1.$nom2."10\:00".$nom2."11\:00.csv";
- my $S12 = $nom1.$nom2."11\:00".$nom2."12\:00.csv";
- my $S13 = $nom1.$nom2."12\:00".$nom2."13\:00.csv";
- my $S14 = $nom1.$nom2."13\:00".$nom2."14\:00.csv";
- my $S15 = $nom1.$nom2."14\:00".$nom2."15\:00.csv";
- my $S16 = $nom1.$nom2."15\:00".$nom2."16\:00.csv";
- my $S17 = $nom1.$nom2."16\:00".$nom2."17\:00.csv";
- my $S18 = $nom1.$nom2."17\:00".$nom2."18\:00.csv";
- my $S19 = $nom1.$nom2."18\:00".$nom2."19\:00.csv";
- my $S20 = $nom1.$nom2."19\:00".$nom2."20\:00.csv";
- my $S21 = $nom1.$nom2."20\:00".$nom2."21\:00.csv";
- my $S22 = $nom1.$nom2."21\:00".$nom2."22\:00.csv";
- my $S23 = $nom1.$nom2."22\:00".$nom2."23\:00.csv";
- my $S24 = $nom1.$nom2."23\:00".$nom3."00\:00.csv";
- open my $FORMAT_FONT, '<', $nombre_arch_fuen2;
- open my $FD1, '>', $S1;
- open my $FD2, '>', $S2;
- open my $FD3, '>', $S3;
- open my $FD4, '>', $S4;
- open my $FD5, '>', $S5;
- open my $FD6, '>', $S6;
- open my $FD7, '>', $S7;
- open my $FD8, '>', $S8;
- open my $FD9, '>', $S9;
- open my $FD10, '>', $S10;
- open my $FD11, '>', $S11;
- open my $FD12, '>', $S12;
- open my $FD13, '>', $S13;
- open my $FD14, '>', $S14;
- open my $FD15, '>', $S15;
- open my $FD16, '>', $S16;
- open my $FD17, '>', $S17;
- open my $FD18, '>', $S18;
- open my $FD19, '>', $S19;
- open my $FD20, '>', $S20;
- open my $FD21, '>', $S21;
- open my $FD22, '>', $S22;
- open my $FD23, '>', $S23;
- open my $FD24, '>', $S24;
- chmod 0777, $S1;
- chmod 0777, $S2;
- chmod 0777, $S3;
- chmod 0777, $S4;
- chmod 0777, $S5;
- chmod 0777, $S6;
- chmod 0777, $S7;
- chmod 0777, $S8;
- chmod 0777, $S9;
- chmod 0777, $S10;
- chmod 0777, $S11;
- chmod 0777, $S12;
- chmod 0777, $S13;
- chmod 0777, $S14;
- chmod 0777, $S15;
- chmod 0777, $S16;
- chmod 0777, $S17;
- chmod 0777, $S18;
- chmod 0777, $S19;
- chmod 0777, $S20;
- chmod 0777, $S21;
- chmod 0777, $S22;
- chmod 0777, $S23;
- chmod 0777, $S24;
- print $FD1 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD2 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD3 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD4 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD5 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD6 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD7 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD8 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD9 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD10 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD11 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD12 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD13 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD14 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD15 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD16 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD17 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD18 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD19 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD20 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD21 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD22 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD23 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- print $FD24 "Result Time,Object Name,Current activated PDP contexts,PDP context activation requests,PDP context activation success ratio\n";
- my $i = 0 ;
- while (my $registro = <$FORMAT_FONT>){
- next if $. == 1 ;
- my @campos = quotewords (",",0, $registro ) ;
- $campos[1] = qq("$campos[1]");
- my $fecha = substr ($campos[0],11,2);
- given ( $fecha )
- {
- when ( '00'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD1 "$archivo_final";
- }
- when ( '01'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD2 "$archivo_final";
- }
- when ( '02'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD3 "$archivo_final";
- }
- when ( '03'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD4 "$archivo_final";
- }
- when ( '04'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD5 "$archivo_final";
- }
- when ( '05'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD6 "$archivo_final";
- }
- when ( '06'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD7 "$archivo_final";
- }
- when ( '07'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD8 "$archivo_final";
- }
- when ( '08'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD9 "$archivo_final";
- }
- when ( '09'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD10 "$archivo_final";
- }
- when ( '10'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD11 "$archivo_final";
- }
- when ( '11'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD12 "$archivo_final";
- }
- when ( '12'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD13 "$archivo_final";
- }
- when ( '13'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD14 "$archivo_final";
- }
- when ( '14'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD15 "$archivo_final";
- }
- when ( '15'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD16 "$archivo_final";
- }
- when ( '16'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD17 "$archivo_final";
- }
- when ( '17'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD18 "$archivo_final";
- }
- when ( '18'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD19 "$archivo_final";
- }
- when ( '19'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD20 "$archivo_final";
- }
- when ( '20'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD21 "$archivo_final";
- }
- when ( '21'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD22 "$archivo_final";
- }
- when ( '22'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD23 "$archivo_final";
- }
- when ( '23'){
- my $archivo_final = join ',',@campos[0,1,2,3,4];
- print $FD24 "$archivo_final";
- }
- }
- $i++;
- }
- close $FORMAT_FONT;
- close $S1;
- close $S2;
- close $S3;
- close $S4;
- close $S5;
- close $S6;
- close $S7;
- close $S8;
- close $S9;
- close $S10;
- close $S11;
- close $S12;
- close $S13;
- close $S14;
- close $S15;
- close $S16;
- close $S17;
- close $S18;
- close $S19;
- close $S20;
- close $S21;
- close $S22;
- close $S23;
- close $S24;
- if ( $e < $j )
- {$e++;
- }
- else
- {
- print "se acabo \n";
- }
- }
- closedir(DIR);
- print "cantidad de archivos procesados $e \n";
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
Bueno, el código me funciona parcialmente, porque genera los archivos con los nombres correctos PERO no guarda el contenido del archivo original en los nuevos y posiblemente no lo esté extrayendo.
Espero me hayan entendido y puedan ayudarme.
¡Gracias!
JZ