Página 1 de 1

Problema con el siguiente codigo

NotaPublicado: 2005-10-02 21:03 @919
por julruiz
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?

re- explicacion

NotaPublicado: 2005-10-02 21:06 @920
por julruiz
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?

NotaPublicado: 2005-10-03 03:08 @172
por explorer39
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...

Re: re- explicacion

NotaPublicado: 2005-10-03 08:14 @384
por kidd
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