• Publicidad

Ayuda con expresiones regulares

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ayuda con expresiones regulares

Notapor nany » 2007-02-21 13:46 @615

Hola. Ojalá pudieran ayudarme a resolver un problema. Es que necesito utilizar expresiones regulares.
Tengo que buscar de una lista la segunda palabra de la línea e imprimir toda.
Pasando como parámetro esa misma palabra.

¡Ayúdenme, por favor!. nany :cry:
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Publicidad

Notapor kidd » 2007-02-21 14:17 @636

Hola:

Vamos a necesitar de más detalles para poder ayudarte. Sería conveniente que nos muestres el texto que quieres filtrar así como el código que ya llevas trabajado por tu parte.

También te recomiendo que cheques nuestra sección de expresiones regulares aquí en el sitio:
http://perlenespanol.com/tutoriales/exp ... index.html

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor nany » 2007-02-21 15:28 @686

Hola, ok. Mira, este es mi programa.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
#######################
#Definicion de variables
#######################
my $f_Archivo_de_Entrada = "/export/home/sistemas/nolvera/perl/expresiones/lic.dat";
my  @a_Nodo = qw (1 2);
######################
#Abrir archivo
######################
my @a_parametros=@ARGV;
foreach my $a_parametros(@a_parametros)
{
    open IN, "$f_Archivo_de_Entrada";
    while (<IN>){
    my  $s_Linea = $_;
    chomp $s_Linea;
close IN;


                  if ($s_Linea =~ m/(.*)(rpplus)(.*)/){
                      print "$s_Linea\n";
                }else{
                     print "No encontro licencia \n"
                     }
}
}#foreach
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Tengo que checar de un archivo la segunda palabra que se refiere al nombre de una licencia; por cierto estoy checando lo que me mandaste, Gracias
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Notapor creating021 » 2007-02-21 15:51 @702

:shock:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
#######################
#Definicion de variables
#######################
my $f_Archivo_de_Entrada = "/export/home/sistemas/nolvera/perl/expresiones/lic.dat";
 my @a_Nodo = qw (1 2);
######################
#Abrir archivo
######################
open IN, "$f_Archivo_de_Entrada";
while (my $s_Linea = <IN>){
  chomp $s_Linea;
  if ($s_Linea =~ m/(.*)(rpplus)(.*)/){
    print "$s_Linea\n";
  }
  else {
    print "No encontro licencia \n"
  }
}
close IN;
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


No necesitas hacer un foreach y después un while... no haces nada con los argumentos, si lo haces =>

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
die "ERROR: Necesito de argumentos para operar\n" until @ARGS;
my $buscar = join("|", @ARGS);
while...
if($linea =~ /($buscar)/){...}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Última edición por creating021 el 2007-02-21 18:32 @813, editado 1 vez en total
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor nany » 2007-02-21 16:15 @718

El problema radica en que sólo busca en la primera línea del archivo. No busca en las demás- ¿Cómo puedo hacer eso?
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Notapor explorer » 2007-02-21 16:54 @745

Sólo busca la primera porque cierras el fichero inmediatamente después de leer esa línea.

Debes hacer el close después de haber leído todo el fichero.

¿Puedes poner un ejemplo del fichero de entrada, aunque sea con datos falsos? Es importante ver la estructura del fichero.
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 creating021 » 2007-02-21 17:16 @761

nany escribiste:El problema radica en que sólo busca en la primera línea del archivo. No busca en las demás. ¿Cómo puedo hacer eso?


Mira el código que he puesto que, tal como dice explorer, cierras el fichero en la primera línea, además usas un loop dentro de otro =>

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach () {
     while (<FICHERO>){}
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cosa que no necesitas hacer (según veo)...
Lo otro es lo de los args pero eso ya lo comenté.

Otra cosa (ver código) es que no miras si hay o no argumentos (bug).
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

gracias

Notapor nany » 2007-02-22 14:37 @650

gracias a todos por su ayuda ya lo acabe gracias
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Notapor nany » 2007-02-23 15:38 @693

Disculpen, sobre este mismo programa debo hacer dos archivos que contengan diferentes licencias. Los dos se encuentran en diferentes directorios, pero no sé cómo enviar al archivo los diferentes parámetros.

¡¡¡¡Saludos!!!!

Son diferentes para los dos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
#######################
#Definicion de variables
#######################
my $f_Archivo_de_Entrada = "/export/home/sistemas/nolvera/perl/expresiones/lic.dat";
my $f_Archivo_de_Salida  = "/export/home/sistemas/nolvera/perl/expresiones/salida/SHCP";
my $f_Archivo_de_salida2 = "/export/home/sistemas/nolvera/perl/expresiones/salida/BANXICO";
my  @a_Nodo = qw (1 2);
my $b_Bandera = 0;
######################
#Abrir archivo
######################
my @a_parametros= @ARGV;
foreach my $a_parametros(@a_parametros)
{
    open IN, "$f_Archivo_de_Entrada";
    my $b_Bandera = 0;
                     while (<IN>){
                                  my  $s_Linea = $_;
                                  chomp $s_Linea;

                                  @a_Lineas = split ' ',  $s_Linea;
                                  $s_Nodo = $a_Lineas[1];
                                  if ($s_Nodo eq $a_parametros){
                                  print "$s_Linea\n";
                                  }

    #### if ($s_Linea =~ m/\s$a_parametros\s/){
        #### print "$s_Linea\n";
    #### }
                                  }

close IN;

#foreach
#####################
#Generando salida
#####################

open OUT, ">$f_Archivo_de_Salida";
            &licencias ($s_Linea);
  sub licencias
     {
       if ($s_Linea =~ m/\s$a_parametros\s/){
       print OUT "$s_Linea\n";
      }
}
close OUT;

}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Notapor explorer » 2007-02-23 15:48 @700

Pues haces un open por cada fichero y luego en el bucle, haces un print distinto (if) según el tipo de licencia.
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

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron