Foros del Web » Programando para Internet » PHP »

Comprobar si una linia existe

Estas en el tema de Comprobar si una linia existe en el foro de PHP en Foros del Web. Wenas de nuevo. Estube creando un script ( que me tubo que ayudar josemi) para actualizar galerias de imagenes. Bien quiero guardar las urls de ...
  #1 (permalink)  
Antiguo 27/01/2004, 18:53
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Comprobar si una linia existe

Wenas de nuevo.

Estube creando un script ( que me tubo que ayudar josemi) para actualizar galerias de imagenes.

Bien quiero guardar las urls de las galerias en el fichero bdd.txt. Pero antes quiero mirar si existe esa url en el fichero, antes de crearlo.

Tengo el archo hoy.txt con las galerias del dia. Una url por linia y quiero que me recorra el fichero hoy.txt y si hay una url que no esta en bddd.txt la agregue.

He probado a hacer un substrate_count de cada linia en hoy.txt y si es mayor que 0, agregue la linia. Pero no funciona.

Alguien me hecha una mano?
  #2 (permalink)  
Antiguo 27/01/2004, 19:34
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
y el codigo

muestra el codigo que has hecho e indicarte que hacer
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #3 (permalink)  
Antiguo 28/01/2004, 03:01
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
//leo fecha de un fichero
$fp = fopen("../../fecha.txt","r");
$fecha = fread ($fp, filesize ("../../fecha.txt"));
fclose ($fp);


//cuento galerias del dia, cuento las apariciones de la fecha.
$fp = fopen("todo.txt","r");
$contents = fread ($fp, filesize ("todo.txt"));
$galerias_hoy = substr_count("$contents", "$fecha");
fclose ($fp);

En el archivo todo.txt tengo todas las urls que muestra (las delos ultimso 3-4dias. A continuacion borro a partir de la ultima linia que contiene la fecha y lo guardo en hoy.txt

//hago la variable hoy con las galerias del dia
$file = "todo.txt";
$file2 = "hoy.txt";
$arr = file($file);
for ( $i = $galerias_hoy ; $i < sizeof($arr) ; $i++ )
{
$arr[$i] = "";
}

$hoy = implode("", $arr);
$fp = fopen($file2,'w');
fputs($fp, $hoy);
fclose($fp);
echo $hoy;

Bueno, recordar que hay una url por linia.

Bien, ahora lo que no me sale comprobar si las linias de hoy.txt existen en bdd.txt, si no existe que la añada y si exoste pues nada.

$fp = fopen("hoy.txt","r");
$contents = fread ($fp, filesize ("hoy.txt"));
fclose ($fp);
for ( $i = 0 ; $i < $galerias_hoy ; $i++ ) {
$existente= substr_count("$contents", "$i");
if ($existente>0)
{
}else
{
for ( $i = 0 ; $i < $galerias_hoy ; $i++ )
{
$fp = fopen("bdd.txt",'a');
fwrite($fp, $arr[$i]);
fclose($fp);
}
}


Alguna idea?

Un saludo.
  #4 (permalink)  
Antiguo 28/01/2004, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si lees tu archivo con file() ... se obtiene un array de tantos elementos como \n (salto de línea) tenga tu archivo .. Si en cada línea (separado por \n) guardas un URL .. podrías usar la función in_array() para ver si tu dato (URL variable) está ya en tu archivo (que has leido y cargado sobre un array con file() )...

Código PHP:
$arr file($file);
if (
in_array($url,$arr)){
   
// existe .. haz lo que tengas que hacer ..
} else{
   
// NO existe .. haz lo que tengas que hacer ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 28/01/2004 a las 07:33
  #5 (permalink)  
Antiguo 28/01/2004, 14:42
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Bueno lo he hecho asi. El archivo 0.txt tiene la surls del dia y el 1.txt es un archipo "base de datos". Pongo numeros en lugar de urls para simpluificar.

Bien de la manera que lo he hecho me tendría que agregar a 1.txt el 2 y el 4 pq no existen. Pero me copia todo el contenido de 0.txt

0.txt contiene:
1
2
3
4

1.txt contiene:
0
1
3
5


$file = "1.txt";
$arr = file($file);
for ( $i = 0 ; $i < sizeof($arr) ; $i++ )
{
$fp = fopen("0.txt","r");
$contents = fread ($fp, filesize ("0.txt"));
$parte= explode("\n", $contents);
$url=$parte[$i];
fclose ($fp);

if (in_array($url,$arr))
{
}else
{
$fp = fopen("1.txt",'a');
fwrite($fp, $url);
fclose($fp);
}
}


Creo que el error está al guardar el resultado, la variable no puede ser $url pq sino me guarda todo el contenido 0.txt. Que debo poner?

Un saludo y gracias.
  #6 (permalink)  
Antiguo 28/01/2004, 15:49
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Bueno, yo usaria otra logica. Es que eso del fopen() en el bucle no me convence.

Asi a bote pronto yo haria:
Código PHP:
$hoy=file("0.txt");  // leemos el fichero de las del dia
$bd=file("1.txt");  // leeomas las almacenadas
$nuevas=array();  // donde metemos las nuevas a añadir a 1.txt
foreach ($hoy as $url)
{
  if (!
in_array($url,$bd)) {
    
// la url no esta en 1.txt
    // entonces la añadimos a $nuevas
    
$nuevas[]=$url;
  }
}

if (
0!=count($nuevas)) {
  
// solo lo ejecutamos si se ha añadido alguna a $nuevo
  
$fp=fopen("1.txt","a");  // creo que es asi
  
$cadena=implode('',$nuevas);  // junta todos los elementos en una sola cadena
  
$cadena="\n".$cadena;  // no se si es necesario. Solo si la ultima linea de 1.txt no acaba en \n
  
fwrite($fp,$cadena,strlen($cadena));
  
fclose($fp);

En principio seria algo asi. Primero creas un array con los elementos de 0.txt que no estan en 1.txt, y luego añades a 1.txt el contenido de ese array.

Puede que el codigo no funcione a la primera, puesto que no lo he probado.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.

Última edición por josemi; 29/01/2004 a las 03:49
  #7 (permalink)  
Antiguo 28/01/2004, 17:58
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Gracias Joseme pero ... :( no funciona. Me da un fallo en el foreach, supongo que por la variable $dia. He probado con $hoy as $url pero no funciona bien.

:(
  #8 (permalink)  
Antiguo 29/01/2004, 03:38
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Jesus, tengo que revisar mas lo que escribo. Es $hoy. Ahora lo edito.

Pero dices que con $hoy no funciona bien, ¿da un mensaje de error? ¿o no hace lo que se supone? ¿o no lo hace completamente?

Si tengo un hueco lo pruebo.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 29/01/2004, 10:43
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Hola de nuevo Josemi.

Bueno la primera vez funciona, pero la segunda vez escribe el texto del dia anterior aunque ya exista.

A ver si me exlico:

Por ejemplo:

en o.txt hay:
1
2
3

Y en 1.txt
2
3
4


Bien al ejecutar el script quedara en 1.txt
2
3
4
1

Bien hasta aquí bien, pero lo vuelvo a ejecutar y los nuevos valores (el 1 en eset caso) no lo tiene en cuenta y aunque exista lo vuelve a escribir :(

No sé si me he explicado bien xDDD

Un slaudo y gracias para variar :P
  #10 (permalink)  
Antiguo 29/01/2004, 16:54
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
SOS Josemi xD
  #11 (permalink)  
Antiguo 29/01/2004, 17:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Si, eso mismo es lo que he observado en un par de pruebas.

Puede que sea un problema con los "\n" finales.

Voy ha hacer mas pruebas. Pero quizas haya que eliminarlo de los arrays (file() los mantiene). Quizas usando array_map() (www.php.net/array_map) en conjuncion con trim() (www.php.net/trim). Y al final hacer el implode de $nuevos uniendolos con "\n"..

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 30/01/2004, 03:10
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Gracias Josemi.

Estoy probando como dices, si lo sonsigo postearé el código por si a alquien le sirve.

Un saludo y gracias de nuevo.
  #13 (permalink)  
Antiguo 30/01/2004, 03:24
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Bueno, esto parece que me funciona (tampoco he hecho muchas pruebas):
Código PHP:
<?php
$hoy
=file("0.txt");  // leemos el fichero de las del dia
$bd=file("1.txt");  // leeomas las almacenadas
$hoy_n=array_map("trim",$hoy);
$bd_n=array_map("trim",$bd);
$nuevas=array();  // donde metemos las nuevas a añadir a 1.txt
foreach ($hoy_n as $url)
{
  if (!
in_array($url,$bd_n)) {
    
// la url no esta en 1.txt
    // entonces la añadimos a $nuevas
    
echo $url;
    
$nuevas[]=$url;
  }
}

if (
0!=count($nuevas)) {
  
// solo lo ejecutamos si se ha añadido alguna a $nuevo
  
$fp=fopen("1.txt","a");  // creo que es asi
  
$cadena=implode("\n",$nuevas);  // junta todos los elementos en una sola cadena
  
$cadena="\n".$cadena;
  
fwrite($fp,$cadena,strlen($cadena));
  
fclose($fp);
}

?>
Quizas habria que tener en cuenta que el salto de linea no es el mismo caracter para todos los sistemas operativos (mira http://www.forosdelweb.com/showthrea...333#post328333 ).

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #14 (permalink)  
Antiguo 30/01/2004, 09:08
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Josemi eres la maquina xDDD

Taba probando ya con array_map pero no me funcionaba.

Muchas gracias nen.
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 13:11.