• Publicidad

Problema con la ñ

¿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 la ñ

Notapor jorzuniga » 2012-12-15 18:43 @822

Hola. Tengo el siguiente problema: hice un pequeño código para interpretar un pdf y pasarlo a un cvs. Todo me funciona perfecto pero, al recorrer la página buscando los datos y se topa con una 'ñ' se salta a la línea siguiente y no muestra la información de esa línea, ilustro con ejemplo:

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

Juan Luis Castro 1929 Hombre Los Boldos Santiago
Rodrigo Flores   1834 Hombre Siena 12 Valparaiso
Miguel Yañez 1324  Hombre Flor 4 Contulmo
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Para este ejemplo, una vez terminado el código solo muestra los dos primeros, la tercera fila la omite y pasa a la cuarta fila. Espero me ayuden.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use CAM::PDF; use CAM::PDF::PageText;
  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. Ñ=n;
  10.  
  11. open FILE, ">servel.csv" or die "error";
  12. foreach my $archivo (@archivos) {
  13.         my $pdf = CAM::PDF->new($archivo); # abre el pdf
  14.         my $num = $pdf->numPages(); # numero de páginas del pdf
  15.         for(my $x=1;$x<=$num;$x++) { # recorre páginas
  16.                 my $page_txt = $pdf->getPageText($x); # lee la página
  17.                 while($page_txt =~ m/\n\w{0,25}\s\w{0,25}\s\w{0,25}\s\w{0,25}\n(\d\d|\d).\d\d\d.\d\d\d-(\d|\w)\n\w{0,3}\n.*\n.*/g){ # saca la info
  18.                         my @t = split /\n/, $&; # splitea la info
  19.                         my $out = encode("utf8", $t[1].",".$t[2].",".$t[3].",".$t[4].",".$t[5]); # encodea y ordena la info en csv
  20.                         print $out."\n"; # imprime la info
  21.                         print FILE $out."\n";
  22.                 }
  23.         }
  24. }
  25. 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 la ñ

Notapor explorer » 2012-12-15 19:38 @860

Bienvenido a los foros de Perl en Español, jorzuniga.

Es muy posible que el problema esté en que el comodín '\w' no sea capaz de identificar la 'ñ' porque el texto extraído del PDF no esté en la misma codificación que lo que espera el programa.

Perl, por defecto, usa la codificación ISO-8859-1, pero esa 'ñ' (y todo el resto del texto) pueden estar en ISO-8859-15 o UTF-8, con lo que la idea que tiene '\w' de caracteres que forman una palabra no incluye a los bytes que forman la 'ñ', y por lo tanto la expresión regular fallará y seguirá el while con la siguiente línea.

En la línea 19 le estás pidiendo a Perl que convierta la representación interna de los caracteres almacenados en @t, a UTF-8... pero lo que no sabemos es qué contienen esos caracteres (en qué codificación están, quiero decir).

Así que lo primero que hay que averiguar es en qué codificación estamos consiguiendo el texto.

Un detalle: estás usando el método getPageText() del módulo CAM::PDF, y no el render() del módulo CAM::PDF::PageText. Eso también podría marcar la diferencia a la hora de obtener el texto.
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 31 invitados