• Publicidad

Problema con espacio

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con espacio

Notapor jorzuniga » 2012-12-18 18:51 @827

Tengo el siguiente problema, tengo varios datos, como por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Nombre        Año   Sexo   Dirección       Ciudad

Juan Tapia    1980   VAR    Siena       Los Angeles
Miguel Ruiz   1970   VAR    (No Tiene)  Los Angeles
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Como ven en la fila número 2, el campo de dirección queda en blanco, al usar mi código en perl y pasarlo a un cvs, queda de la siguiente manera.

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Nombre        Año   Sexo Direccion   Ciudad

Juan Tapia    1980   VAR   Siena        Los Ángeles
Miguel Ruiz   1970   VAR   Los Ángeles  (Queda En Blanco)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Lo cuál no es verdad ya que el campo dirección debería quedar vacío y el campo ciudad debería tener Los Ángeles. Adjunto código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CAM::PDF; use CAM::PDF::PageText; # necesario
  2. use Encode; use LWP::UserAgent;
  3. use LWP::Simple; use strict; use warnings;
  4.  
  5. ## Archivos a un Array
  6. opendir (PATH, ".") or die "$!";
  7. my @archivos = grep {/.*?\.pdf/}  readdir PATH;
  8. close PATH;
  9.  
  10. open FILE, ">servel.csv" or die "error";
  11. foreach my $archivo (@archivos) {
  12.         my $pdf = CAM::PDF->new($archivo); # abre el pdf
  13.         my $num = $pdf->numPages(); # numero de páginas del pdf
  14.         for(my $x=1;$x<=$num;$x++) { # recorre páginas
  15.                 my $page_txt = $pdf->getPageText($x); # lee la página
  16.                 while($page_txt =~ m/\n\D{0,25}\s\D{0,25}\s{0,25}\s{0,25}\n(\d\d|\d).\d\d\d.\d\d\d-(\d|\S)\n\w{0,3}\n.*\n.*/g){ # saca la info
  17.                         my @t = split /\n/, $&; # splitea la info
  18.                         my $out = encode("ISO-8859-15", $t[1].",".$t[2].",".$t[3].",".$t[4].",".$t[5]); # encodea y ordena la info en csv
  19.                         print $out."\n"; # imprime la info
  20.                         print FILE $out."\n";
  21.                 }
  22.         }
  23. }
  24. close FILE;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
jorzuniga
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-12-15 18:31 @813

Publicidad

Re: Problema con espacio

Notapor explorer » 2012-12-18 19:39 @860

El problema es el uso de split(), que no entiende de posiciones.

¿Las columnas aparecen siempre en el mismo sitio?
Si ese es el caso, puedes usar unpack() para sacar los campos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con espacio

Notapor jorzuniga » 2012-12-18 19:55 @872

Sí, las columnas siempre aparecen en el mismo sitio.
No sé cómo usar el unpack() en el código :(
jorzuniga
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2012-12-15 18:31 @813

Re: Problema con espacio

Notapor explorer » 2012-12-18 21:19 @930

Lo primero que tienes que saber es el ancho de todas las columnas.

Si suponemos que este ejemplo es correcto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Nombre        Año   Sexo   Dirección       Ciudad

Juan Tapia    1980   VAR    Siena       Los Angeles
Miguel Ruiz   1970   VAR    (No Tiene)  Los Angeles
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

entonces, excluyendo las dos primeras líneas, el ancho de las columnas es:
Nombre: 14
Año: 7
Sexo: 7
Dirección: 12
Ciudad: 11 (el resto de la línea)

entonces la extracción queda así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my @t = unpack ("A14 A7 A7 A12 A*", $&);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados