Foros del Web » Programando para Internet » PHP »

Modificar un registro txt

Estas en el tema de Modificar un registro txt en el foro de PHP en Foros del Web. Holaa... espero de su ayuda necesito modificar un registro desde un archivo .txt usando solo codigo php, sin ayuda de mysql ni html... este es ...
  #1 (permalink)  
Antiguo 30/08/2010, 15:55
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Modificar un registro txt

Holaa... espero de su ayuda necesito modificar un registro desde un archivo .txt usando solo codigo php, sin ayuda de mysql ni html... este es el codigo que he hecho pero no me resulta es logico que necesita de alguna funcion o de algo mas q permida que lo que yo ingrese sea lo q se modificique... espero de su ayuda. gracias...

$cedu = trim (fgets(STDIN));
$archivo = file("dataClientes.txt");
$lineas = count($archivo);
for($i=0; $i < $lineas; $i++)
{
$clientes[] = explode(";",$archivo[$i]);
}
for($i=0; $i<count($clientes); $i++)
{
if($cedu == $clientes[$i][0])
{
printf("%-10s%-30s%-30s%-30s\n",$clientes[$i][0],$clientes[$i][1],$clientes[$i][2],$clientes[$i][3]);
echo "¿Seguro que desea modificar este registro?si/no \n";
$resp = trim (fgets(STDIN));
if ($resp='si')
{
echo "Ingrese Cedula: \n";
$ced = trim (fgets(STDIN));
echo "Ingrese Nombre: \n";
$nom = trim (fgets(STDIN));
echo "Ingrese Apellido: \n";
$ape = trim (fgets(STDIN));
echo "Ingrese Observaciones: \n";
$obs = trim (fgets(STDIN));
$clientes ="$ced;$nom;$ape;$obs\n";
fwrite($archivo,$clientes);
$archivo = fopen("dataClientes.txt","w+");

}
}
}
  #2 (permalink)  
Antiguo 31/08/2010, 03:05
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Modificar un registro txt

Tampoco es que sepa mucho de ficheros pero intentare ayudarte algo. :S
Primero de todo decirte que php es un lenguaje del tipo servidor, es decir, no puedes hacer:
Código PHP:
echo "¿Seguro que desea modificar este registro?si/no \n"
y esperar que el usuario responda.
dentro del for:
Código PHP:
$clientes[] = explode(";",$archivo[$i]); 
No se si esto es del todo correcto, luego lo pruebo y te digo si funciona
Cuando hazes count($clientes) es lo mismo que poner count($lineas) ademas $clientes no es un array bidimensional, es decir no puedes hacer $clientes[$i][0], o por lo menos que yo sepa.

Te recomendaria que primero mirases esto:
http://www.desarrolloweb.com/manuales/75/
O algun otro tutorial de gestion de ficheros.
  #3 (permalink)  
Antiguo 31/08/2010, 10:18
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Modificar un registro txt

Holaaa.. bueno todo eso que me has comentado ha funcionado.. y bueno sobre la pregunta q realizo es porq todo lo estoy corriendo desde una consola atraves de ubuntu.. en si lo que necesito es como hago para sobre escribir el registro que estoy modificando... :D
  #4 (permalink)  
Antiguo 31/08/2010, 12:36
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Modificar un registro txt

Lo que yo hago diferente a lo que tienes, es que reemplazo el valor en el array no en el archivo, eso no funciona.
El algoritmo sería.

- Leo el archivo a un array
- Recorro el array buscando la linea y al encontrarla la edito.
- Vuelvo a crear el archivo con los datos del array.
  #5 (permalink)  
Antiguo 31/08/2010, 15:12
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Modificar un registro txt

ok.. eso es lo q yo tengo en mente pero no se como editarlo... tu me podrias ayudar con el codigo??
  #6 (permalink)  
Antiguo 31/08/2010, 15:33
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Modificar un registro txt

Imagino (no conozco tus datos) que algo así:

Código PHP:

...
for(
$i=0$i<count($clientes); $i++)
{
   
$linea=explode("separador",$clientes[$i]); //separo el registro en campos

   
if($cedu == $linea[0])  // $linea[0] = cedula del registro i
   
{
       
$linea[1]=$nom//valor que viene de un form
       
$linea[2]=$ape;
       
$clientes[$i]=implode("seperador",$linea);
   }
}

...

//al final

file_put_contents("ruta/archivo",$clientes); 

Espero no haberme equivocado.
  #7 (permalink)  
Antiguo 01/09/2010, 11:21
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Modificar un registro txt

holaa.. estuve probando como me dijiste pero no me funciona.. lei algunas cosas y creo q la funcion array_slice podria ser.. pero he tratado y tampoco hace nada.. estoy algo confundida con esto!!
  #8 (permalink)  
Antiguo 01/09/2010, 12:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Modificar un registro txt

el problema radica en que un array no puede guardarse tal cual en un archivo, pues es un tipo dinámico de PHP...

en todo caso hay que convertir la información del array en texto plano, de alguna forma... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 01/09/2010, 12:51
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Modificar un registro txt

Muestra como lo hiciste.
Respecto de lo que dice pateketrueke, creo que bastaría con usar implode()

Código PHP:
...
for(
$i=0$i<count($clientes); $i++)
{
   
$linea=explode("separador",$clientes[$i]); //separo el registro en campos

   
if($cedu == $linea[0])  // $linea[0] = cedula del registro i
   
{
       
$linea[1]=$nom//valor que viene de un form
       
$linea[2]=$ape;
       
$clientes[$i]=implode("separador",$linea);
   }
}

...

//al final

file_put_contents("ruta/archivo",implode("\n",$clientes)); 
  #10 (permalink)  
Antiguo 01/09/2010, 14:18
 
Fecha de Ingreso: agosto-2010
Mensajes: 7
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Modificar un registro txt

echo "Ingrese el numero de cedula: \n";
$cedu = trim (fgets(STDIN));
$archivo = file("dataClientes.txt");
$lineas = count($archivo);
for($i=0; $i <= $lineas; $i++)
{
$clientes[] = explode(";",$archivo[$i]);
}
for($i=0; $i<=count($clientes); $i++)
{
if($cedu == $clientes[$i][0])
{
printf("%-10s%-30s%-30s%-30s\n",$clientes[$i][0],$clientes[$i][1],$clientes[$i][2],$clientes[$i][3]);
echo "¿Seguro que desea modificar este registro?si/no \n";
$resp = trim (fgets(STDIN));
switch ($resp)
{
case $resp=='si':
echo "Ingrese Cedula: \n";
$ced = trim (fgets(STDIN));
echo "Ingrese Nombre: \n";
$nom = trim (fgets(STDIN));
echo "Ingrese Apellido: \n";
$ape = trim (fgets(STDIN));
echo "Ingrese Observaciones: \n";
$obs = trim (fgets(STDIN));
$clientes[0]=$ced;
$clientes[1]=$nom;
$clientes[2]=$ape;
$clientes[3]=$obs;
$clientes[$i]=implode(";", $clientes);
}
}
}

Asi lo hice con el implode como me recomendaste y no funciono..
  #11 (permalink)  
Antiguo 01/09/2010, 14:32
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Respuesta: Modificar un registro txt

Fíjate bien en el código que hice, no se parece en nada al tuyo. Ahora lo dejo mas completo.

Código PHP:

echo "Ingrese el numero de cedula: \n";
$cedu trim (fgets(STDIN));

$clientes=file("dataClientes.txt"); //$clientes aqui es un array, no es necesario crear otro

for($i=0$i<count($clientes); $i++)
{
   
$linea=explode("separador",$clientes[$i]); //separo el registro en campos

   
if($cedu == $linea[0])  // $linea[0] = cedula del registro i
   
{
       
$linea[1]=$nom//valor que viene de un form
       
$linea[2]=$ape;
       
$clientes[$i]=implode("separador",$linea);
   }
}

...

//al final

file_put_contents("ruta/archivo",implode("\n",$clientes)); 

Última edición por claudiovega; 01/09/2010 a las 14:38

Etiquetas: modificar, registro, txt
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 11:56.