Foros del Web » Programando para Internet » PHP »

Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Estas en el tema de Buscar cadena en Txt y almacenar frase coincidentes en otro fichero en el foro de PHP en Foros del Web. Que tal Foreros!... Hoy traigo un tema el cual llevo dando vueltas y vueltas y no doy con la forma. Tengo un fichero .txt el ...
  #1 (permalink)  
Antiguo 22/01/2015, 13:16
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Pregunta Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Que tal Foreros!...

Hoy traigo un tema el cual llevo dando vueltas y vueltas y no doy con la forma.

Tengo un fichero .txt el cual leo y quiero buscar una cadena en concreto o palabra, y que todas las frases que tengan esa palabra se almacenen en un fichero a parte.

Es decir tengo un texto como el siguiente contenido en un .txt

Código:
Mis palabras de ejemplo(;)palabras de ejemplos(;)nuevo ejemplo(;)termino sin ejemplo
La palabra a buscar es: ejemplo.

Como ven el .txt tiene cada frase separada por un (;) por lo que es más fácil encontrar las palabras a separar, aunque no lo he logrado :( .

El resultado de la búsqueda daría un nuevo fichero .txt con estos datos.

Código:
Mis palabras de ejemplo(;)nuevo ejemplo(;)termino sin ejemplo
Eso sería el resultado que quiero, con este resultado luego ejecutaría otro script que tengo ya hecho, para sustituir una palabra en todas las frases separadas por (;)

¿Alguna idea de como realizar esto y buscar esa palabra en un .txt? Y almacenar esas FRASES que contengan la palabra en otro .txt.

Dejo algo de prueba pero no consigo mucho.

Código PHP:
$nombre_fichero 'keys.txt';
$nombre_fichero utf8_decode ($nombre_fichero);
            
$contenido    file_get_contents($nombre_fichero);   /*carga contenido*/


        
$cadena_buscada "ejemplo";
        
/*aqui supongo luego de buscar la cadena QUE NO LO HAGO, guardaría el resultado en $contenido y lo pasaría separado por (;) */
        
$contenido explode("(;)"$nombre_fichero);


    
// output final.
$output array_unique(explode('(;)'$contenido));  /* aqui aun me falta cargar de solo las frases que tengan la palabra buscada */

file_put_contents($nombre_ficheroimplode('(;)'$output), LOCK_EX); 
Pienso me falta un foreach para recorrer cada una de las palabras buscando con una conicidencia en un IF. pero no doy con ello.

Seguiré intentando.

Espero me puedan ayudar un saludo a todos!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #2 (permalink)  
Antiguo 22/01/2015, 13:21
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Para extraer las palabras de tu archivo necesitarías preg_match_all() y expresiones regulares, creo que es lo más sencillo,

luego guardas las coincidencias en un array o string, y con fopen puedes crear el archivo donde guardar esa información.
  #3 (permalink)  
Antiguo 22/01/2015, 14:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

El foreach() no es necesario, puedes usar array_filter() y strpos() para verificar la existencia de dicha sub-cadena.

Código PHP:
Ver original
  1. $palabras = array('foo', 'bar');
  2. $test = 'a';
  3.  
  4. var_dump(array_filter($palabras, function($str) use ($test) {
  5.   return strpos($str, $test) !== FALSE;
  6. }));

¿Se entiende la idea?

Ahora, con lo que mencionan de usar expresiones regulares: no estoy de acuerdo.

Es decir, la idea de usar expresiones regulares es analizar texto precisamente en busca de "expresiones regulares", y dado que "ejemplo" no es una expresión sino una palabra entonces no conviene usar expresiones regulares sólo porque sí.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 22/01/2015, 14:04
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Cita:
Iniciado por pateketrueke Ver Mensaje
Ahora, con lo que mencionan de usar expresiones regulares: no estoy de acuerdo.

Es decir, la idea de usar expresiones regulares es analizar texto precisamente en busca de "expresiones regulares", y dado que "ejemplo" no es una expresión sino una palabra entonces no conviene usar expresiones regulares sólo porque sí.
Pero no busca solo la palabra ejemplo si no pedazos de oraciones separadas por ";" que contienen la palabra ejemplo

bien puede ser

oración con ejemplo en medio; ejemplo de oración al principio; oración que al final lleva ejemplo;

o por lo menos eso es lo que yo entendí.

debido a esta parte
Cita:
El resultado de la búsqueda daría un nuevo fichero .txt con estos datos.

Código:
Mis palabras de ejemplo(;)nuevo ejemplo(;)termino sin ejemplo
  #5 (permalink)  
Antiguo 22/01/2015, 14:20
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Cita:
Iniciado por memoadian Ver Mensaje
Pero no busca solo la palabra ejemplo si no pedazos de oraciones separadas por ";" que contienen la palabra ejemplo

bien puede ser

oración con ejemplo en medio; ejemplo de oración al principio; oración que al final lleva ejemplo;

o por lo menos eso es lo que yo entendí.

debido a esta parte


Correcto lo que busco es que la palabra o palabras que ponga en la búsqueda, estén en cada una de las frases que van separadas por (;) .
Y coger cada una de esas frases que SI contienen el patrón a buscar y guardarlos en otro .txt

Estoy mirando lo de preg_match_all y bueno aún no doy con ello jeje.

Estoy intentando algo así por ahora.

Código PHP:
$nombre_fichero 'keys.txt'
$nombre_fichero utf8_decode ($nombre_fichero); 
             
$contenido    file_get_contents($nombre_fichero);   /*carga contenido*/ 


$cadena_buscada '/^ejemplo/i';
        
preg_match ($cadena_buscada$contenido$coincidencias);
        
print_r($coincidencias); /* aqui solo veo q aparece una vez ejemplo.*/ 
Ahora me queda poder guardarlas en el array y escribir con el fopen.

Código PHP:
$archivo fopen("palabras_encontradas.txt","a")

fwrite$archivo$coincidencias);

fclose($archivo); 
Sería así esa parte no?, aunque lo que no quiero es que guarde al final del contenido es decir el método (a) en fopen, lo que quiero es que reemplace el contenido y actualice continuamente encima de el anterior.

pero bueno, primero estoy con la función de búsqueda de las palabras y almacenar esas frases en un nuevo .txt (NOTA: cada frase va separada por (;) y necesito guardar toda la frase entera en el nuevo fichero .txt)

Gracias por su ayuda me podrías dar un tip para almacenarlas en el array. Seguiré intentando
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #6 (permalink)  
Antiguo 25/01/2015, 12:59
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Nada aún no doy con ello :( .
Consigo ver en pantalla pero sólo las palabras que busca y no cada una de las frases completa.
(es decir hasta llegar al (;) )
Podrías ayudarme con este problema, jum he mirado muchas funciones con cadenas y no encuentro ninguna para realizar esto de buscar frases con X palabra y guardarlas en otro fichero.txt

Saludos y gracias a todos.
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1
  #7 (permalink)  
Antiguo 25/01/2015, 15:48
 
Fecha de Ingreso: abril-2013
Ubicación: Envigado
Mensajes: 18
Antigüedad: 11 años, 7 meses
Puntos: 3
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Me voy a saltar la parte en la que lees el archivo e ingresas los valores en una variable porque asumo que eso ya sabes de sobra como hacerlo.

Código PHP:
// Tenemos el siguiente string:
    
$textoInicial 'Esto es un texto ejemplo;Con frases separadas por punto y coma;en donde solo debo extraer las frases que contengan la palabra "ejemplo"; pero no las que contengan ejemplos';
    
    
// en primer lugar creamos un array con cada frase tomando como item delimitador el punto y coma (;)
    
$arrayFrases explode(";"$textoInicial);
    
    
// Imprimimos el array
    
echo '<pre>';
    
var_dump($arrayFrases);
    
    
// Recorremos el array y para cada indice evaluamos si existe la palabra "ejemplo"
    
foreach($arrayFrases as $indice => $frase){
        if (
preg_match("/ejemplo\b/"$frase)) {
            
// Cuando encontramos que la palabra existe, creamos un nuevo array con esa frase
            
$nuevoArrayFrases[] = $frase;
        } 
    }
    
    
// Imprimimos nuestro nuevo array
    
echo '<pre>';
    
var_dump($nuevoArrayFrases);
    
    
// Una vez que ya tenemos el array, lo convertimos en un string
    
$nuevoTexto implode(";"$nuevoArrayFrases); 
A partir de este punto simplemente tienes que crear el nuevo archivo con tu nuevo string.

Espero te sirva.

Salu2

Nota: Porque usar preg_match(): La razón de usar la funcion preg_match radica unicamente en que la busqueda que debes hacer debe encontrar una similitud exacta, "ejemplo", de lo contrario si usaras strpos, encontraria similitudes en frases con palabras como "EjEmPlo", "ejemplos", "ejemplossss" etc.
El condicional /b obliga a preg_match a encontrar una similitud exacta del texto incluyendo mayusculas, minúsculas y longitud de la palabra.
  #8 (permalink)  
Antiguo 27/01/2015, 06:43
Avatar de HackID1  
Fecha de Ingreso: febrero-2013
Ubicación: En Update
Mensajes: 492
Antigüedad: 11 años, 9 meses
Puntos: 17
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Correcto muchisimas Gracias la verdad por tu ayuda.

Me ha solucionado muchos problemas que aún no podía llevar a cabo.

Ya lo he conseguido con tu respuesta me has ayudado practicamente con lo más complicado y mi error de no saber realizar correctamente la identificación de cada palabra y almacenarla en el array.

Ahora lo tengo más claro y me está funcionando.

Veo que eres de Colombia jeje como yo. ;)

Muchas Gracias Carlostitoi

MODIFICADO:

Cita:
Iniciado por carlostitoi Ver Mensaje
Carlostitoi
Buenas la modificación la he realizado, porque quisiera poder buscar la frase pero sin Distinguir MAYUSCULAS de minusculas.

He visto que es con el operador i de las expresiones regulares pero lo he puesto tanto delante de $palabra como atrás, con barras ( \ o asi / ) y no consigo que detecte ambas y funcione.

Es solo esto, el script funciona perfecto pero quiero añadir lo de no distinguir MAY de min.

Gracias de verdad por la ayuda en esta comunidad, que para mi es la mejor de Internet. ;) !!!!
__________________
Puntuar +1 es buena forma de dar las gracias. :P
Your Time is limited, so don't waste it living someone else´s life.
Por: HackID1

Última edición por HackID1; 30/01/2015 a las 07:13
  #9 (permalink)  
Antiguo 02/02/2015, 07:36
 
Fecha de Ingreso: abril-2013
Ubicación: Envigado
Mensajes: 18
Antigüedad: 11 años, 7 meses
Puntos: 3
Respuesta: Buscar cadena en Txt y almacenar frase coincidentes en otro fichero

Cita:
Iniciado por HackID1 Ver Mensaje
Correcto muchisimas Gracias la verdad por tu ayuda.

Me ha solucionado muchos problemas que aún no podía llevar a cabo.

Ya lo he conseguido con tu respuesta me has ayudado practicamente con lo más complicado y mi error de no saber realizar correctamente la identificación de cada palabra y almacenarla en el array.

Ahora lo tengo más claro y me está funcionando.

Veo que eres de Colombia jeje como yo. ;)

Muchas Gracias Carlostitoi

MODIFICADO:



Buenas la modificación la he realizado, porque quisiera poder buscar la frase pero sin Distinguir MAYUSCULAS de minusculas.

He visto que es con el operador i de las expresiones regulares pero lo he puesto tanto delante de $palabra como atrás, con barras ( \ o asi / ) y no consigo que detecte ambas y funcione.

Es solo esto, el script funciona perfecto pero quiero añadir lo de no distinguir MAY de min.

Gracias de verdad por la ayuda en esta comunidad, que para mi es la mejor de Internet. ;) !!!!
La ventaja de usar pregmatch radica en poder definir patrones de búsqueda, para encontrar coincidencias sobre elementos casi únicos en un texto, para tu caso, necesitas encontrar coincidencias que no son tan únicas y aceptan cierta permisividad, para ese caso, personalmente, es preferible recurrir a funciones mas simples y menos robustas.

http://php.net/manual/es/function.stripos.php

Etiquetas: almacenar, cadena, fichero, frase, txt
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 08:15.