• 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.

Notapor creating021 » 2007-02-23 16:32 @730

De tu código nany:

Por cada @ARGV estás abriendo el archivo y leyendolo de nuevo... ¿No crees que es mejor leer primero el archivo y depués hacer el foreach, es decir, no es mejor hacer un foreach en por cada líne?

Mira:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open IN, "fichero";
while ($linea = <IN>){
  chomp;
  my @a_Lineas = split ' ', $linea....
  foreach(@ARGV){print "$linea\n" if $s_Nodo eq $_;}
  ...
}
close IN;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cómo es eso de que llamas a un sub antes de crearlo?
En ese sub (sub licencias) cómo es que puedes usar $a_parametros sindo que ha sido definida para para el uso del foreach anterior (en tu código).

De lo que he entendido esto es lo que quieres hacer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;
#######################
#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
######################
die "ERROR: Necesito de argumentos para operar\n" until @ARGV;
my @a_parametros = @ARGV;
open IN, $f_Archivo_de_Entrada or die "Oops $f_Archivo_de_Entrada: $!\n";
my $parametros = join "|", @a_parametros;
while (my $linea = <IN>){
  chomp;
  my $s_Nodo = ((split ' ', $linea)[1]);
  if($s_Nodo =~ /($parametros)/){print "$linea\n";}
}
close IN;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Publicidad

nuevamente yo

Notapor nany » 2007-02-27 13:22 @598

hello soy yo de nuevo bueno solo para confirmar una duda :oops: esk tengo que leer de un archivo los datos de las licencias xxx y de ahi buscarlas en otro archivo de entrada donde se encuentran esas mismas licencias y generar el archivo de salida con la linea completa
nany
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2006-12-11 13:36 @608

Notapor creating021 » 2007-02-27 15:05 @670

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;
#######################
#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
######################
die "ERROR: Necesito de argumentos para operar\n" until @ARGV;
my @a_parametros = @ARGV;
open IN, $f_Archivo_de_Entrada or die "Oops $f_Archivo_de_Entrada: $!\n";
my $parametros = join "|", @a_parametros;
open OUT ">$f_Archvio_de_Salida" or die "Error en salida: $!\n";
while (my $linea = <IN>){
  chomp;
  my $s_Nodo = ((split ' ', $linea)[1]);
  if($s_Nodo =~ /($parametros)/){
    print "$linea\n";
    print OUT "$linea\n"
  }
}
close OUT;
close IN;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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-28 12:27 @560

Si ya lo entendí.

Sólo que debo crear una hash pero no me sale ya que se sobrescribe.

Por favor, es que este programa me ha resultado un poco difícil.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
######################
#Abrir archivo
######################
my  @a_Nodo = qw (1 2);
my $b_Bandera = 0;
%s_cliente1;
%s_cliente2;
my $b_Bandera = 0;
%s_cliente1;
%s_cliente2;
######################
#Abrir archivo
######################
open IN, "$f_Archivo_de_Entrada2";
while (<IN>){
              my $s_Linea1 = $_;
              chomp $s_Linea1;
              my @a_Lineas1 = split ',', $s_Linea1;
              $s_Nodo = $a_Lineas1[0];
             ## $s_cliente1{$s_Nodo}= $a_Lineas1[1];
              ##$s_cliente1{$s_Nodo}= $a_Lineas1[2];
              ##$s_cliente1{$s_Nodo}= $a_Lineas1[3];
              ##$s_cliente1{$s_Nodo}= $a_Lineas1[4];
Coloreado en 0.001 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-28 12:38 @568

La variable $s_Nodo no está definida en ningún lugar.
Para crear un hash cuyas claves sean el número de licencia, te vale con poner

$hash{ $a_Lineas1[0] } = $s_Linea1;

en el bucle, por ejemplo.

Te recomiendo que pongas

use strict;
use warnings;

al principio del programa, para que te ayude un poco más.

Otro detalle: estás escribiendo en el foro Intermedio.
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

Anterior

Volver a Intermedio

¿Quién está conectado?

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