Foros del Web » Programando para Internet » PHP »

problema al guardar contenido en txt

Estas en el tema de problema al guardar contenido en txt en el foro de PHP en Foros del Web. hola, estoy trabajando con archivos de texto. en un archivo tengo guardada informacion de la siguiente forma... Código: 1:2:3:4:5 a:b:c x:y:z el archivo lo leo ...
  #1 (permalink)  
Antiguo 02/09/2009, 02:29
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 17 años, 10 meses
Puntos: 7
problema al guardar contenido en txt

hola, estoy trabajando con archivos de texto.

en un archivo tengo guardada informacion de la siguiente forma...

Código:
1:2:3:4:5
a:b:c
x:y:z
el archivo lo leo cada X tiempo para ir almacenando un dato en el ultimo lugar de la primera linea (en el ejemplo: despues del 5) y eliminar el primer registro para siempre mantener la misma cantidad (en este caso 5 registros).

para hacer eso realizo lo siguiente:

- leo el archivo con file() para crear un array con las lineas de contenido,
- transformo la primera linea en un array separandola por ':' con explode()
- recorro dicho array con un bucle FOR desde el segundo registro hasta el final (para eliminar el primer registro)
- en cada vuelta del bucle le agrego nuevamente ':' para crear el nuevo array
- terminado el bucle, al contenido le agrego el nuevo valor que ocupara el ultimo registro (por ejemplo: 8, entonces quedara asi: 2:3:4:5:8
- luego abro nuevamente el archivo en modo escritura ( fopen(archivo, w) )
- guardo los nuevos datos.

el problema es que solo me guarda el contenido del array que he estado modificando, osea la primera linea 2:3:4:5:8 pero la segunda linea y la tercera no se como poder agregarla al contenido.

aqui muestro el código que estoy usando:

Código PHP:
<?php
// Leo los datos del archivo y lo almacenamos en un array
$linea=file('archivo.txt');

// creo un array con el contenido de la primera linea separandolo por ':'
$datos=explode(':',$linea[0]);

// recorro el array desde el segundo elemento (no necesito el primero)
for( $i 1$i count($datos); $i++)
{
    
//en cada vuelta vuelvo a cargar los datos (agregue el trim() por que sin el tenia un comportamiento extraño)
    //agrego despues de cada elemento ':'
    
$nuevosDatos.=trim($datos[$i]).':';
}

// al resultado le agrego el nuevo dato que deseo incluir al final
$NuevosDatos.='8';

// abro el archivo en modo escritura y guardo los datos
$fch=fopen($file_dbg"w");
fwrite($fch$nuevosDatos);
fclose($fch);
?>
no se como podria guardar en el txt el nuevo contenido completo, osea los nuevos datos de la primera linea pero tambien la segunda y la tercera linea,

Código:
2:3:4:5:8
a:b:c
x:y:z
atento a sus sugerencias.
gracias.
  #2 (permalink)  
Antiguo 02/09/2009, 02:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: problema al guardar contenido en txt

Te falta declarar por primera vez la variable $nuevosDatos. Sino no te va a funcionar correctamente el .= Debes llamarla primero antes del for

Código PHP:
Ver original
  1. $nuevosDatos = "";
  2. for(.......

Y ademas estas solamente dividiendo la primera linea. No estas usando las demas lineas
Código php:
Ver original
  1. $datos=explode(':',$linea[0]);

Debes hacer un bucle que recorra todas las lineas y las vaya dividiendo. Y dentro de ese bucle haces tambien el otro for que tienes declarado debe hacerlo algo asi:

Código PHP:
Ver original
  1. $nuevosDatos="";
  2. for($j=0; $j<count($linea); $j++){
  3.   // creo un array con el contenido de la primera linea separandolo por ':'
  4.   $datos=explode(':',$linea[$j]);
  5.  
  6.   // recorro el array desde el segundo elemento (no necesito el primero)
  7.   for( $i = 1; $i < count($datos); $i++)
  8.   {
  9.       //en cada vuelta vuelvo a cargar los datos (agregue el trim() por que sin el tenia un comportamiento extraño)
  10.       //agrego despues de cada elemento ':'
  11.       $nuevosDatos.=trim($datos[$i]).':';
  12.   }
  13.  
  14.   // al resultado le agrego el nuevo dato que deseo incluir al final
  15.   if($j==0){
  16.     $nuevosDatos.='8';
  17.   }
  18. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 02/09/2009 a las 02:41
  #3 (permalink)  
Antiguo 02/09/2009, 04:15
 
Fecha de Ingreso: junio-2006
Ubicación: Antofagasta
Mensajes: 216
Antigüedad: 17 años, 10 meses
Puntos: 7
Respuesta: problema al guardar contenido en txt

gracias abimaelrc por tu ayuda y pronta respuesta, me sirvió de mucho tu código. alprincipio no me funciono asi que me puse a estudiarlo bien, luego de un rato de prueba y error, una modificacion casi insignificante me logró funcionar correctamente como deseaba.

el codigo resultante es el siguiente.

Código PHP:
$linea=file('archivo.txt');
$nuevasLineas='';

// recorro el array linea por linea
for ($j=0$j<count($linea); $j++)
{
    
// leo el contenido de la linea, separo por ':' y creo un array $dato[]
    
$dato=explode(':'$linea[$j]);
    
$nuevosDatos='';
    
// recorro el array empesando por el segundo elemento (no necesito el primero)
    
for ($i=1$i<count($dato); $i++)
    {
        
// cargo cada dato a la variable añadiendo ':'
        
$nuevosDatos.=trim($dato[$i]).':';
    }
    
// si estamos en la primera linea agregamos el nuevo dato al final
    
if ($j==0){
        
$nuevosDatos.="8\n";
        
$linea[$j]=$nuevosDatos;
    }
    
    
// agrego el contenido actualizado de cada linea a la variable $nuevasLineas
    
$nuevasLineas.=$linea[$j];

gracias por tu ayuda.
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 20:46.