• Publicidad

Problemas con grep

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

Problemas con grep

Notapor tlmejia » 2008-08-28 16:26 @726

¡¡Hola!! Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!C:\perl\bin\perl.exe -X

use File::Find;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use strict;
my $q = new CGI;
my @thefiles = $q->param("thefiles");
my @files = $q->param("files");
my @lines = $q->param("lines");
my $f = $q->param("f");
my $query = $q->param("query");
my $consulta = $q->param("consulta");


require "divs.pl";

#my $Mostrar= "";
if($consulta == '1'){
  &Resultados;
 }else{
  &Principal;
}

sub Principal{
  print <<eof;

    <html><head><title>prueba archivos cgi</title></head><body>
    <form action='Nuevo3.cgi' method='post'>
    <input type='text' name='query' size='50'>
    <input type='submit' name='Mostrar' value='Mostrar' >
    <input type='hidden' name='consulta' size='2' value='1'>
    </form>
    </body></html>

eof

}

sub Resultados{
  print <<eof;

    <a href='Nuevo3.cgi'>Otra búsqueda</a><br>\n
    <p>Para la búsqueda $query, estos resultados se encontraron:</p>

eof


  my $dir = 'C:\AppServ\www\pdf';
  opendir(IMD, $dir) || die("No se puede abrir el directorio");
  @thefiles= readdir(IMD);
  closedir(IMD);
 
  @lines = "cd $dir; grep '$query' *.txt" ;
    foreach $f (@thefiles)
      {
         unless ( ($f eq ".") || ($f eq "..") )
      {
    print "$f<br />";
 }
}
 

}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Aquí en la parte de resultados sí me manda el valor de $query, pero me está mostrando todos los archivos dentro de esa carpeta, no el que está en el valor de $query. No sé si la línea donde hace el grep está bien o no.

¡¡Gracias por el apoyo de antemano!!
Tania
tlmejia
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-08-27 13:33 @606

Publicidad

Notapor MMjerado » 2008-08-28 16:45 @739

Si, quieres leer en específico un fichero que le pasas a $query , sera mas fácil hacer lo siguiente:

if(! -e $dir.$query.".txt" ) {
print "No existe el fichero que haremos, que haremos\n<br>";
exit; # o funcion que se quiera
}
MMjerado
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2008-08-28 16:22 @724

Notapor tlmejia » 2008-08-28 16:48 @742

Más bien lo que quiero es busque dentro de los txt si encuentra lo que viene en query, no tanto el archivo sino dentro del archivo :?:
tlmejia
Perlero nuevo
Perlero nuevo
 
Mensajes: 18
Registrado: 2008-08-27 13:33 @606

Notapor explorer » 2008-08-28 16:52 @744

En la variable @thefiles están todos los ficheros del directorio. Y los pintas sin ningún tipo de filtrado con respecto a $query.

Obviamente la línea del grep está mal porque:
* usas la variable @lines, que no se usa en ninguna otra parte del programa
* Estás asignando una cadena de caracteres a la variable @lines. Lo más seguro es que lo que realmente quisieras hacer es ejecutar el contenido de lo entrecomillado. Bueno, pues entonces te has equivocado de comillas. Debes usar las comillas invertidas (`). O usar @lines = qx(cd $dir; grep '$query' *.txt);.
* Dudo mucho que en una máquina Windows tengas instalado el comando grep que estás intentando ejecutar de forma directa.

Esta es una posible solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub Resultados{
    print <<eof;

    <a href='Nuevo3.cgi'>Otra búsqueda</a><br>\n
    <p>Para la búsqueda $query, estos resultados se encontraron:</p>

eof


    my $dir = 'C:\AppServ\www\pdf';
    opendir(IMD, $dir) || die("No se puede abrir el directorio");
    @thefiles = readdir(IMD);
    closedir(IMD);
 
    foreach $f (@thefiles) {
        if ($f ne "." and $f ne "..") {
            print "$f<br />";
        }
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero con esto solo pintas los nombres de los ficheros. Luego, te queda, abrirlos uno por uno, y ver si contienen la palabra que buscas. O... mucho más cómodos... usar el módulo File::Grep del hilo anterior, que te recomendaría que lo retomaras en lugar de abrir nuevos hilos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron