PHP - Problemas al grabar un array modificado a un archivo con fputs

 
Vista:
sin imagen de perfil

Problemas al grabar un array modificado a un archivo con fputs

Publicado por Andrea (2 intervenciones) el 19/09/2014 21:50:12
Hola, tengo un problema con un array que cargo desde un archivo y despues lo modifico.
Cuando lo grabo me queda sin el salto de linea, es un archivo de texto donde grabo con fputs.
Primero lo leo al archivo donde cada linea 3 campos.
El primero,es la hora que varia de 00 a 23 y despues son dos valores.
Cuando lo leo uso el explode porque estan separados por comas.
Despues modifico un dato de la tabla o array por ejemplo la 13 y cuando miro el archivo me aparece
seguido el 14, es decir que graba el trece sin el salto de linea.
Este es el codigo para que vena si me pueden ayudar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//aqui se carga el array con el archivo de 24 horas
//---------------------------------------------------------
$filas = 24;
$fh = fopen("../temp/".$master.".log", "r");
for($i=0; $i < $filas; $i++)
			{
				$pizza= fgets($fh);
				echo "<br> $pizza en $i <br>";
				$porciones = explode(",", $pizza);
				$matriz[$i][0] =$porciones[0];
				$matriz[$i][1] =$porciones[1];
				$matriz[$i][2] =$porciones[2];
			}
 
fclose($fh);
 
//Aqui altero la hora 13 y actualizo el array
//-----------------------------------
//Estos valores son de prueba
$hora=13;
$maxhora=56;
$maxdia=789;
$filas = 24;
for($i=0; $i < $filas; $i++)
			{
				if ($hora == $matriz[$i][0])
				{
				$matriz[$i][1]=$maxhora;
				$matriz[$i][2]=$maxdia";
				}
			}

//aqui graba de nuevo la array en un archivo nuevo 
//---------------------------------------
$columnas = 3;
$filas = 24;
$fh = fopen("../temp/okeyera.log", "w");

for($i=0; $i < $filas; $i++)
			{
				$porciones[0]=$matriz[$i][0];
				$porciones[1]=$matriz[$i][1];
				$porciones[2]=$matriz[$i][2];
				fputs($fh,"$porciones[0],$porciones[1],$porciones[2]");
			}
fclose($fh);

?>
----------------
Este es el codigo, cuando voy a mirar el archivo me queda el 13 sin el avance de lina :
01, 0, 0
02, 0, 0
03, 0, 0
04, 0, 0
05, 0, 0
06, 0, 0
07, 0, 0
08, 0, 0
09, 0, 0
10, 0, 0
11, 0, 0
12, 0, 0
13,56,78914, 0, 0
15, 0, 0
16, 0, 0
17, 0, 0
18, 0, 0
19, 0, 0
20, 0, 0
21, 0, 0
22, 0, 0
23, 0, 0
24, 0, 0
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 729
Bronce
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Problemas al grabar un array modificado a un archivo con fputs

Publicado por Gonzalo (615 intervenciones) el 20/09/2014 14:29:46
el problema pudiera venir de origen, puedes incluir el archivo original?

una forma de arreglarlo es inicializar primero la matriz $porciones [1 .. 24][1,2] todos igual a "", cargar el archivo en la matriz igual que siempre, despues debes arreglar el array 13 y 14 y hasta entonces guardar el archivo.

aqui te comento que he tenido problemas cuando uso el indice $porciones[1][0] ya que no es igual al indice $porciones[01][0].

suerte, salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problemas al grabar un array modificado a un archivo con fputs

Publicado por Andrea (2 intervenciones) el 20/09/2014 21:59:39
Hola Gonzalo, gracias por tu respuesta.
Este es el fuente que crea la el archivo que leo, es sencillo.
Saludos. Andrea.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$registrocero = 0;
$locadir='../temp/'.$master.'.log';
echo "El archivo se llama : $master.log<br>";
if (!file_exists ($locadir))
	{
	echo "Creando Archivo de Control = $master.log <br>" ;
	$fh = fopen("../temp/".$master.".log", "a");
	fputs($fh, "01,$registrocero,$registrocero \n",30);
	fputs($fh, "02,$registrocero,$registrocero \n",30);
	fputs($fh, "03,$registrocero,$registrocero \n",30);
	fputs($fh, "04,$registrocero,$registrocero \n",30);
	fputs($fh, "05,$registrocero,$registrocero \n",30);
	fputs($fh, "06,$registrocero,$registrocero \n",30);
	fputs($fh, "07,$registrocero,$registrocero \n",30);
	fputs($fh, "08,$registrocero,$registrocero \n",30);
	fputs($fh, "09,$registrocero,$registrocero \n",30);
	fputs($fh, "10,$registrocero,$registrocero \n",30);
	fputs($fh, "11,$registrocero,$registrocero \n",30);
	fputs($fh, "12,$registrocero,$registrocero \n",30);
	fputs($fh, "13,$registrocero,$registrocero \n",30);
	fputs($fh, "14,$registrocero,$registrocero \n",30);
	fputs($fh, "15,$registrocero,$registrocero \n",30);
	fputs($fh, "16,$registrocero,$registrocero \n",30);
	fputs($fh, "17,$registrocero,$registrocero \n",30);
	fputs($fh, "18,$registrocero,$registrocero \n",30);
	fputs($fh, "19,$registrocero,$registrocero \n",30);
	fputs($fh, "20,$registrocero,$registrocero \n",30);
	fputs($fh, "21,$registrocero,$registrocero \n",30);
	fputs($fh, "22,$registrocero,$registrocero \n",30);
	fputs($fh, "23,$registrocero,$registrocero \n",30);
	fputs($fh, "24,$registrocero,$registrocero \n",30);
	fclose($fh);
	}
?>

Este es el que carga la matriz.
El problema se da cuando se modifica algo del ultimo campo de la matriz y no los del medio.
========================================================================

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$i=0;
$filas = 24;
$matriz = null;
$fh = fopen("../temp/".$master.".log", "r");
for($i=0; $i < $filas; $i++)
			{
				$pizza= fgets($fh,30);
//				echo "<br> $pizza en $i <br>";
				$porciones = explode(",", $pizza);
				$matriz[$i][0] =$porciones[0];
				$matriz[$i][1] =$porciones[1];
				$matriz[$i][2] =$porciones[2];
			}
 
fclose($fh);
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar