Foros del Web » Programando para Internet » PHP »

Busqueda por linea dentro de txt

Estas en el tema de Busqueda por linea dentro de txt en el foro de PHP en Foros del Web. Hola todos: Estoy tratando de hacer un codigo para buscar en un archivo .txt con varias lineas, cierta cadena, ya sea de una o mas ...
  #1 (permalink)  
Antiguo 04/09/2008, 20:25
 
Fecha de Ingreso: noviembre-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 0
Busqueda por linea dentro de txt

Hola todos:

Estoy tratando de hacer un codigo para buscar en un archivo .txt con varias lineas, cierta cadena, ya sea de una o mas palabras, y que en los resultados me muestre todas aquellas lineas en las que se encontro esa cadena. Por ejemplo tengo en el txt:

Código:
hola como estas
bien bien y tu
bien tambien
que bueno que preguntes como estoy
y al buscar "como" me devuelva:
Código:
hola como estas
que bueno que preguntes como estoy
Es decir, en las dos lineas donde esta la palabra como.

Esto es el codigo que tengo:

Código:
<?php
$i=0; 
$file = fopen ("archivo.txt", "r");
$v=0;
while (!feof($file)) {    
    $linea = fgets($file);
    $cadena[$v]=$linea;
	$v++;    
    
}
fclose ($file); 
$bus="hola";
foreach($cadena as $pasar)
{
if( $bus == $pasar || $bus."\r\n" == $pasar )  
        {
            echo "Se encontro: ".$pasar;
            $i=1;
        }
}
if($i=='0')
{
    echo "No se encontró nada.";
	}
?>
Pero este codigo, sino me equivoco, busca la cadena exacta que esta en la linea y devuelve un solo resultado. Si me ayudaran porfavor a modificar este codigo para que no tenga que ser una linea entera del txt para que se encuentre y que me devuelva mas de un resultado.

Muchas gracias y espero haberme hecho comprender.
  #2 (permalink)  
Antiguo 04/09/2008, 20:59
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Busqueda por linea dentro de txt

Usa la función file() para leer el archivo. Esta función generará un array con cada fila de tu archivo. Luego, con un bucle, lees cada una de las líneas, buscando la palabra que deseas. Si la encuentras, la guardas en otro arreglo. Al final del bucle, tú segundo array contendrá todas las líneas que tuvieron la palabra buscada.

Fui claro? Para buscar la palabra en la línea puedes usar strpos(), expresiones regulares, o explode() para partir la línea en palabras, y luego buscar en el array resultante la palabra.

Saludos,
  #3 (permalink)  
Antiguo 05/09/2008, 14:11
 
Fecha de Ingreso: noviembre-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 0
Respuesta: Busqueda por linea dentro de txt

Muchas gracias okram, vere que puedo hacer y te cuento.
  #4 (permalink)  
Antiguo 07/09/2008, 10:53
 
Fecha de Ingreso: septiembre-2008
Mensajes: 19
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Busqueda por linea dentro de txt

Siguiendo el hilo de este tema, un par de soluciones:

Código PHP:
//=================================================================
function buscaCadena_opc1($cadena){
    
$lineas file('archivo.txt',FILE_IGNORE_NEW_LINES);
    foreach(
$lineas as $linea){
        if(
strpos($linea,$cadena)!==false)
        {
            echo 
$linea."<br />";
        }
    }
}
//=================================================================
function buscaCadena_opc2($cadena){
    
$fd fopen ("archivo.txt""r");
    while (!
feof ($fd)) 
    {
           
$linea fgets($fd4096);
        if(
strpos($linea,$cadena)!==false)
        {
            echo 
$linea."<br />";
        }
    }
    
fclose ($fd);
}
//=================================================================

//=================================================================
ini_set("memory_limit","300M");
$tiempo_inicio microtime(true);
buscaCadena_opc1("como");
$tiempo_final microtime(true);
$tiempo $tiempo_final $tiempo_inicio;
echo 
"Tiempo de ejecución para [buscaCadena_opc1] = $tiempo"."<br />";
//--------------
$tiempo_inicio microtime(true);
buscaCadena_opc2("como");
$tiempo_final microtime(true);
$tiempo $tiempo_final $tiempo_inicio;
echo 
"Tiempo de ejecución para [buscaCadena_opc2] = $tiempo";
//================================================================= 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:20.