• Publicidad

Problema CSV y expresiones regulares

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

Notapor AnKiSeTh » 2007-06-03 14:09 @631

¡Buenas!
Tanto tiempo, lamento no responder antes, pero el resto de los ramos también me tenían un tanto atareado.

¡¡Estoy a un paso de resolver el problema!! ^^
Ya no tengo problemas con las comas o ';' dentro de las comillas, lo logré con la siguiente expresión:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push(@todo,$+)while $_=~(m/(".*?")|(%.*?%)|[,;](.*?)[,;]|[,;](.*?)|(.*?)[,;]|(.*)/g);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Bueno, eso resulta bastante bien (¡larga vida a los cortocircuitos!).

Ahora, el único problema que me queda es el siguiente: en el caso de que la línea de entrada sea algo como ';,;4;2' debería imprimir algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <td></td> 
  2. <td></td> 
  3. <td></td> 
  4. <td>4</td> 
  5. <td>2</td> 


El problema es que solo me imprime el espacio vacío una sola vez, y ahí no entiendo que falla, ya que la regex para esos casos es no voraz, debería tomar todos los espacios vacíos :S

Bueno, ojalá me puedan ayudar ^^ (no necesariamente la solución, ¡pero que alguien me explique porque no funciona, estaría muy agradecido!)

¡Disculpen las molestias, muchas gracias!
AnKiSeTh
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-16 19:10 @840
Ubicación: Entre la silla y el PC

Publicidad

Notapor AnKiSeTh » 2007-06-09 19:54 @871

¡Buenas!

Ahora mi tarea esta 100% funcional, logré resolver el problema editando la regex y con una condicion extra, pero se agradece mucho la ayuda

¡Gracias!
AnKiSeTh
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-16 19:10 @840
Ubicación: Entre la silla y el PC

Notapor explorer » 2007-06-09 21:06 @921

¡Anda!... ¿y cuál es esa regex? :-)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AnKiSeTh » 2007-06-23 21:29 @937

Te respondo después de la fecha de entrega de mi tarea,
hay algunos de mi clase que encontraron mis posts XD

Saludos!!
AnKiSeTh
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-16 19:10 @840
Ubicación: Entre la silla y el PC

Notapor AnKiSeTh » 2007-07-13 01:38 @109

Buenas!!
visto que ya se acabó el plazo para presentar tareas, comparto con ustedes como resolví el problema planteado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

die "Y el argumento?" unless $ARGV[0];
open(ENTRADA,"<$ARGV[0]") or die "No puedo abrir el archivo $ARGV[0]";
$ARGV[0]=~s/(\.csv)$/\.html/ or $ARGV[0].=".html";
open(SALIDA,">$ARGV[0]");
printf SALIDA "<html>\n<head>\n</head>\n<body>\n<table border=1>\n";
while(<ENTRADA>){
        chomp;
       
        #Expresion regular para "desarmar" la linea
        push(@todo,$+)while $_=~(m/(".*?")[,;]?|(%.*?%)[,;]?|(.*?)[,;]|(.*)/gx);
       
        #Caso especial de que no hayan datos despues del ultimo separador
        push(@todo,"") if (m/[,;]$/);
        print SALIDA "\t<tr>\n";
        while($#todo>0){
                $q=shift(@todo);

                #Insercion de TAGS
                ($q=~s/^"/<i>/ and $q=~s/"$/<\/i>/) or ($q=~s/^%/<b>/ and $q=~s/%$/<\/b>/);
                print SALIDA "\t\t<td>$q</td>\n";
        }
        #Eliminamos ultimo espacio vacio que queda en el arreglo ($todo[0])
        shift(@todo);
        print SALIDA "\t</tr>\n";
}
print SALIDA "</table>\n</body>\n</html>\n";
close(ENTRADA);close(SALIDA);  
 
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


así transforma el archivo csv en un html, la limitación es que no deben haber comillas dentro de otras comillas, la que la regex no trabaja ese caso.

Saludos!!
AnKiSeTh
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2007-05-16 19:10 @840
Ubicación: Entre la silla y el PC

Anterior

Volver a Básico

¿Quién está conectado?

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