• Publicidad

Problema con el siguiente codigo

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

Problema con el siguiente codigo

Notapor julruiz » 2005-10-02 21:03 @919

Hola a todos...

Tengo el siguiente código y no me funciona

Código: Seleccionar todo
open FILE,"pagina.txt";
&obtenerMeta();
close(FILE);


sub obtenerMeta {
  #obtenemos todas las etiquetas meta
  open META,">meta.txt";
  my $i=1;
  while(my $line=<FILE>) {
   if(my @meta=$line=~/(\<meta.*?\>)/ig)
   {
     print META "$i\t$_\n" foreach @meta;
   }
   $i++;
  }
  close(META);
  copiarMeta();
}

sub copiarMeta {
  open PRUEBA,">p.txt";
  open META,"meta.txt";
  while(my $linea=<FILE>){
     print PRUEBA "$linea\n";
  }
  close(META);
  close(PRUEBA);
}


al ejecutar el codigo cuando llamo a obtenerMeta me
copia en el archivo meta.txt que encuentre en pagina.txt,
pero luego llamo a copiarMeta para que me copie el archivo
en uno nuevo pero no me funciona, y el archivo queda vacio..


¿que puedo hacer para corregir el codigo?
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Publicidad

re- explicacion

Notapor julruiz » 2005-10-02 21:06 @920

Hola a todos...

Tengo el siguiente código y no me funciona

Código: Seleccionar todo
open FILE,"pagina.txt";
&obtenerMeta();
close(FILE);


sub obtenerMeta {
  #obtenemos todas las etiquetas meta
  open META,">meta.txt";
  my $i=1;
  while(my $line=<FILE>) {
   if(my @meta=$line=~/(\<meta.*?\>)/ig)
   {
     print META "$i\t$_\n" foreach @meta;
   }
   $i++;
  }
  close(META);
  copiarMeta();
}

sub copiarMeta {
  open PRUEBA,">p.txt";
  open META,"meta.txt";
  while(my $linea=<FILE>){
     print PRUEBA "$linea\n";
  }
  close(META);
  close(PRUEBA);
}



al ejecutar el codigo cuando llamo a obtenerMeta me
copia en el archivo meta.txt todas las etiqueta meta
que encuentre en pagina.txt, pero luego llamo a copiarMeta
para que me copie el archivo en uno nuevo pero no me
funciona, y el archivo queda vacio..


¿que puedo hacer para corregir el codigo?
julruiz
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2005-09-11 20:55 @913

Notapor explorer39 » 2005-10-03 03:08 @172

A ver, a ver...
En la subrutina copiarMeta, lo que estoy viendo es que
Abres un fichero llamado p.txt en modo escritura.
Abres el fichero meta.txt en modo de lectura.
Un bucle while en que vas leyendo del FILE abierto antes, pero sabemos que ese fichero YA lo hemos leído entero, por efecto del while de la subrutina obtenerMeta.
Luego, cierras los ficheros.
Me parece que hay un pequeño lío entre abrir y cerrar algunos ficheros...
explorer39
 

Re: re- explicacion

Notapor kidd » 2005-10-03 08:14 @384

julruiz escribiste:Hola a todos...

Tengo el siguiente código y no me funciona

Código: Seleccionar todo
open FILE,"pagina.txt";
&obtenerMeta();
close(FILE);


sub obtenerMeta {
  #obtenemos todas las etiquetas meta
  open META,">meta.txt";
  my $i=1;
  while(my $line=<FILE>) {
   if(my @meta=$line=~/(\<meta.*?\>)/ig)
   {
     print META "$i\t$_\n" foreach @meta;
   }
   $i++;
  }
  close(META);
  copiarMeta();
}

sub copiarMeta {
  open PRUEBA,">p.txt";
  open META,"meta.txt";
  while(my $linea=<FILE>){
     print PRUEBA "$linea\n";
  }
  close(META);
  close(PRUEBA);
}



al ejecutar el codigo cuando llamo a obtenerMeta me
copia en el archivo meta.txt todas las etiqueta meta
que encuentre en pagina.txt, pero luego llamo a copiarMeta
para que me copie el archivo en uno nuevo pero no me
funciona, y el archivo queda vacio..

¿que puedo hacer para corregir el codigo?




Código: Seleccionar todo
obtenerMeta();
copiarMeta();


sub obtenerMeta {

open FILE,"pagina.txt";

  #obtenemos todas las etiquetas meta
  open META,">meta.txt";

  my $i=1;
   while(my $line = <FILE>) {
    chomp($lie);
    if(my @meta = $line =~/(\<meta(.*?)\>)/ig){
      print META "$i\t$_\n" foreach @meta;
     }
   $i++;
  }
  close(META);

close(FILE);

}


sub copiarMeta {

  open PRUEBA,">p.txt";
    open META,"meta.txt";
      while(<META>){
        print PRUEBA $_;
       }
    close(META);
  close(PRUEBA);

}



El primer problema que ví es en tu expresión regular:

Código: Seleccionar todo
my @meta=$line=~/(\<meta.*?\>)/ig


Aquí siempre vas a tener el array @meta vacío, simplemente porque no hay nada que capturar. Entonces lo que hacemos es ponemos un par de parentesis y listo:

Código: Seleccionar todo
my @meta = $line =~/(\<meta(.*?)\>)/ig


Por ahí había un par de errores que tenías, por ejemplo cuando copiabas el archivo META a PRUEBA, etc.


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


Volver a Intermedio

¿Quién está conectado?

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

cron