Foros del Web » Programando para Internet » PHP »

Concordancias entre ficheros

Estas en el tema de Concordancias entre ficheros en el foro de PHP en Foros del Web. Wenas, Tengo el fichero numeros.txt con 10 numeros, uno por linea: -1- -2- -3- -35- ..... Tengo el fichero concordancias.txt con 11 valores: -1-2- -2-3- ...
  #1 (permalink)  
Antiguo 18/01/2006, 15:07
 
Fecha de Ingreso: febrero-2002
Mensajes: 139
Antigüedad: 22 años, 2 meses
Puntos: 0
Concordancias entre ficheros

Wenas,


Tengo el fichero numeros.txt con 10 numeros, uno por linea:
-1-
-2-
-3-
-35-
.....

Tengo el fichero concordancias.txt con 11 valores:
-1-2-
-2-3-
-35-36-
-34-25-
-25-16-
.......

Tengo el fichero valores.txt con 11 posibles valores
0/0/0/0/0/0/0/0/0/0/0

Pretendo dar una puntuacion a cada concordancia segun las veces que aparezca un numero de numeros.txt y este valor lo guarde en valores.txt

En el ejemplo:
-1-2- -->2 punto
-2-3--->2 puntos
-35-36--->1 punto
-34-25--->0 puntos
-25-16--->0 puntos

En valores.txt debe guardar 2/2/1/0/0

Lo he intentado de la siguiente manera, pero solo me cuenta para la primera concordancia (2/0/0/0 ....):
//Mirar las puntos actuales
$fp = fopen("valores.txt","r");
$valores = fread ($fp, filesize ("valores.txt"));
$valor = explode('/',$valores);
fclose ($fp);

//Miro si aparece en cada 1 de las concordancias y sumo 1 a los puntos
$file = "concordancias.txt";
$arr = file($file);
for ($x = 0 ; $x < sizeof($arr) ; $x++ ){
$file2 = "numeros.txt";
$arr2 = file($file2);
for ( $z = 0 ; $z < sizeof($arr2) ; $z++ ){
$numerajo = $arr2[$z];
$veces=substr_count($arr[$x], $numerajo);
if ($veces > 0){
$valor[$x] = $valor[$x] + 1;
}else{
$valor[$x] = $valor[$x];
}
}
}

//Grabo los nuevos puntos para las seisenas
$file = "puntos/puntos-seisenas.txt";
$fp = fopen($file,'w');
fwrite( $fp, $valor[0]."/".$valor[1]."/".$valor[2]."/".$valor[3]."/".$valor[4]."/". $valor[5]."/".$valor[6]."/".$valor[7]."/".$valor[8]."/".$valor[9]."/".$valor[10]);
fclose ($fp);

Si alguien tiene la solución, se lo agradecería ya que no doy con ella.

Un saludo.
  #2 (permalink)  
Antiguo 18/01/2006, 17:54
 
Fecha de Ingreso: diciembre-2005
Mensajes: 122
Antigüedad: 18 años, 4 meses
Puntos: 0
varias cosas:

Código:
//innecesario
$file = "concordancias.txt";
$arr = file($file);

//manera corta
$concordancias = file( 'concordancias.txt' );

/*con todo respeto, esto esta pésimo. por cada valor de concordancias guardas el mismo fichero. todos usan $i, y $j para iterar, porque tú no?. cuando recorres segun el tamaño de un arreglo es mas rápido calcular su tamaño y guardarlo, tú calculas en cada iteración el tamaño, que nunca cambia.*/
for ($x = 0 ; $x < sizeof($arr) ; $x++ ){
$file2 = "numeros.txt";
$arr2 = file($file2);
for ( $z = 0 ; $z < sizeof($arr2) ; $z++ ){
$numerajo = $arr2[$z]; 
$veces=substr_count($arr[$x], $numerajo);
if ($veces > 0){
$valor[$x] = $valor[$x] + 1;
}else{
$valor[$x] = $valor[$x];
}
}
}

//esto puede ser reemplazado por un bucle for
fwrite( $fp, $valor[0]."/".$valor[1]."/".$valor[2]."/".$valor[3]."/".$valor[4]."/". $valor[5]."/".$valor[6]."/".$valor[7]."/".$valor[8]."/".$valor[9]."/".$valor[10]);
fclose ($fp);

y ahora como lo haria yo

$concordancias = file( 'concordancias.txt' );
$numeros = file ( 'numeros.txt' );
$puntuacion = array();

for ( $i = 0, $n = count ($concordancias); $i < $n; $i++)
{
        for( $j = 0, $m = count( $numeros ); $j < $m; $j++)
        {
             puntuacion[$i] += substr_count( $concordancias[$i], trim( $numeros[$j] ) );
        }
}

$fp = fopen( 'puntos/puntos-seisenas.txt','w');
fwrite( $fp, $puntuacion[0]);

for( $i = 1; $i < $n; $i++)
{
    fwrite( $fp, '/');
    fwrite( $fp, $puntuacion[$i];
}

fclose ($fp);
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 06:58.