• Publicidad

Problemas con expresión regular

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

Notapor rochi » 2007-05-02 13:03 @586

Hola, gracias, si, no me expresé bien, necesito lo que va antes de # y de lo que va después, solo la parte numérica (descartando cualquier otro tipo de carateres).

El resultado final debe ser una \n al final de c/línea, excepto en la última.
Probaré con el bucle, saludos y muchisimas gracias
rochi
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2007-04-23 02:03 @127

Publicidad

Notapor rochi » 2007-05-02 14:20 @639

bueno, sigo con el desconcierto, porque aplico el bucle, y el problema de "No new line at end of file" persiste cuando comparo la salida oficial con la mía.

La salida debe ser así:

Código: Seleccionar todo
"Algo aca\n"
"otra cosa por aqui\n"
"esta es la ultima linea de salida y NO lleva nueva linea"

(La última linea NO debe tener \n)

Las expresiones regulares funcionan en el sentido que sale lo que busco, además lo útlimo que matchean son numeros \d+ ni blancos ni \n, etc.
Asi lo hago

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$i = 0;
$linea = "";

while ($linea = <INFILE>)
  {
     chomp($linea);

   if ($i != 0)   #hubo línea procesada debo agregar \n
     {print "\n";}
   else
     {$i = 1;}

   if ($linea =~ /$er_telef_1/s)
    {
         $aux = "(0598) $3";
         #sigo procesando
    }
   if ($linea =~ /$er_telef_2/s)
   {          
        #sigo procesando
   }

  print $aux";  
}
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


El print de \n lo hago si hubo una variable procesada previamente, de lo contario no.

Saludos y graciass
rochi
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2007-04-23 02:03 @127

Notapor explorer » 2007-05-02 18:24 @808

Hay una solución muy buena para este caso peculiar en el que hay finales de línea para todas las líneas menos para la última.

Consiste en que, en vez de imprimir las líneas a la salida estándar, guardarlas dentro de un array. Luego, con el método join(), unirlas todas con el carácter fin de línea, y eso ya puede salir hacia el exterior.

Algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @lineas, "Linea a imprimir";
# ...
} # Fin del bucle
$salida = join("\n", @lineas);
print $salida;
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

Notapor rochi » 2007-05-02 20:23 @891

Si, tenés razón. Es lo que tiene aprender desde el apuro, nunca es bueno.

El problema mayor es que nunca se cuando viene un \n y cuando no al final del archivo, hay para archivos que si, y otros para los que no. Y no pude encontrar una exp reg que contemple ambas cosas.

Gracias por tu ayuda, saludos
rochi
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2007-04-23 02:03 @127

Notapor explorer » 2007-05-03 02:52 @161

Podrías hacer la comprobación pasado el final del bucle, cuando has terminado de procesarlo todo, ver si la última línea leída tiene fin de línea o no, con algo como /(\s)*$/.

Y luego imprimirlo todo con print join("\n",@lineas), $1;

En caso de que exista fin de fichero, lo pone. Sino, no.
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

Notapor rochi » 2007-05-03 03:37 @192

bueno, algo de eso intenté hacer, solo que ponía (\s*)?, el * adentro de los (). El tema es que preguntaba si if ($1) tenia algo, y cuando no tiene fin de linea da en falso. Pero tampoco funcionó.
saludos, y gracias por seguir aclarandome el panorame
ro
rochi
Perlero nuevo
Perlero nuevo
 
Mensajes: 19
Registrado: 2007-04-23 02:03 @127

Anterior

Volver a Básico

¿Quién está conectado?

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

cron