Foros del Web » Programando para Internet » PHP »

Ayuda con datos entre ficheros

Estas en el tema de Ayuda con datos entre ficheros en el foro de PHP en Foros del Web. Wenas, tengo un enorme problema con un script que estoy realizando. No se como plantearlo, lo he rehecho de mil maneras diferentes pero no consigo ...
  #1 (permalink)  
Antiguo 10/01/2006, 22:10
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Ayuda con datos entre ficheros

Wenas, tengo un enorme problema con un script que estoy realizando. No se como plantearlo, lo he rehecho de mil maneras diferentes pero no consigo que funcione correctamente.

Tengo los siguientes ficheros:

fichero1.txt (18 o mas elementos) (Numeros con guiones a los lados)
-1-
-4-
-15-
-31-
-0-
-19-
-3-
.....

fichero2.txt (23 elementos)(bloques de 4 numeros con guiones a los lados)
-1-2-3-4-
-4-5-6-7-
-6-7-8-9-
..........

La idea es que busque en fichero2.txt las lineas que 3 de sus 4 numeros esten en fichero1.txt, y el numero que falte lo guarde en fichero3.txt.

Ejemplo: En la primera linea de fichero2.txt hay 3 de sus 4 elementos en fichero1.txt( -1-,-3- y -4-) asi que deberia guardar en fichero3.txt el que falta (-2-). Necesito que haga esto con todas las lineas.

No tengo ni idea de como hacerlo, alguien me hecha una mano, plis?

Un saludo.

Última edición por yamakasiz; 10/01/2006 a las 23:11
  #2 (permalink)  
Antiguo 10/01/2006, 23:07
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
Perdón... ¿Cómo eliminarlo del fichero1.txt el número que falta (en el ejemplo el -2-)? Si justamente, no está...
  #3 (permalink)  
Antiguo 10/01/2006, 23:12
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Ha sido un error :P

Me podrías ayudar? Sabrías como plantearlo?

Un saludo.
  #4 (permalink)  
Antiguo 10/01/2006, 23:18
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
bueno, creo q está listo...
Me agarraste desvelado y con ganas de "pi eich pi", no creas q siempre va a ser tan fácil

Código PHP:
<?php
$root1 
"fichero1.txt";
$fp1 fopen($root1,"r");
$txt1 fread($fp1,filesize($root1));
fclose($fp1);
// en $txt1 guardé la lista de números

$root2 "fichero2.txt";
$fp2 fopen($root2,"r");
$txt2 fread($fp2,filesize($root2)+1);
fclose($fp2);

// en $txt2 la lista de líneas

$new_txt3 ""// después voy a ir agregando los resultados

$nums explode(chr(13),trim($txt1)); //separo todos los renglones de números en un array
foreach ($nums as $campo => $valor) {
    
$nums[$campo] = trim(str_replace("-","",$valor)); // le quito los guiones para qeudarme con los números
}

$lines explode(chr(13),trim($txt2)); // separo las lineas

foreach ($lines as $linea) {
    
$linea trim($linea); 
    
$linea substr($linea,1,strlen($linea) - 2); // en cada linea le saco los caracteres de más
    
$linea_numeros explode("-",$linea); // lo separo por los guiones
    
if (count(array_intersect($linea_numeros,$nums)) == 3) { // si la interseccion entre esta linea y todos los números del fichero 1 es correcta
        
$diferencia array_diff($linea_numeros,$nums);
        
$new_txt3 .= "-".$diferencia[0].$diferencia[1].$diferencia[2].$diferencia[3]."-".chr(13); // me lo agrega a un archivo. La diferencia puede ser en la posicion 0, 1, 2 o 3, pero sólo existe una, así que si concateno todas, me va a devolver la correcta... no es prolijo, pero es efectivo
    
} else {
        
//acá si querés hacer algo con las líneas que tienen 4, 2, 1 o 0 "aciertos"
    
}
}
$fp3 fopen("fichero3.txt","w+");
fwrite($fp3,$new_txt3); // que escriba eñ fichero3
fclose($fp3);
?>
  #5 (permalink)  
Antiguo 10/01/2006, 23:23
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 15 años, 9 meses
Puntos: 0
Bendito café :P

Muchas gracias, era justamente lo que necesitaba.

Mira que habría probado de un millón y medio de maneras diferentes.. pero nada.

Lo dicho, mil gracias.

Un saludo.
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 21:41.