entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Añadir datos en la primera linea de un csv usando php

Tengo una interrogante de cómo lograr almacenar estos valores en las primera linea de un csv ejemplo:

$id = '1';
$name= 'alfredo';

$file = fopen('demos.csv', 'a');
fputcsv($file, array($id, $name));
fclose($file);

Esta parte funciona bien lo malo está en que 1,alfredo se almacenan en la última celda o linea de csv y lo que busco es que se guarden al inicio de la lista.

Ejemplo:

> 1,alfredo 
> 2,juan 
> 3,jon

Gracias por su tiempo espero alguna idea..

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola @Botxtrem-Solutions,

tenés dos cuestiones que resolver para escribir al principio de un archivo de texto.

Una es abrir el archivo con r+, ya que a posiciona el puntero al descriptor al final del archivo y luego no se puede retroceder.

La otra cuestión es que deberías mover todos los elementos del CSV para hacer lugar al primero y que el 1 pase a 2, el 2 pase 3, etc.

Esto significa que primero tenés que leer los valores para no perderlos antes de sobreescribirlos con el que viene...

Una forma de hacer esto, aprovechando la potencia de los vectores en PHP, sería:

// Nombre de archivo
$a = 'demos.csv';
// Datos a escribir
$id = '1';
$name= 'alfredo';
// Lee todo el archivo y lo carga a un vector
$data = file($a);
// Agrega el dato al vector
array_unshift($data, "$id,$name");
// Abre el archivo para escritura, truncando el contenido
$file = fopen($a, 'w');
// recorre el vector y reescribe todo el archivo
foreach($data as $l){
  fwrite($file, "$l\n");
}
fclose($file);

Saludos cordiales

1voto

Botxtrem-Solutions comentado

Gracias por tu respuesta .
Solo tengo un inconveniente al ejecutar tu código el archivo demos.csv se guarda con muchas lineas en blanco ejemplo:


5aa5d8eea721a,alfredo
5aa5d8e730e03,alfredo

5aa5d8c9c1988,alfredo

2,alfredo

1,alfredo

0,alfredo 

Me pregunto a que se debe y como resolverlo Gracias.

2votos

Leonardo-Tadei comentado

Se te agrega una línea en blanco porque las líneas del CSV terminan con un ENTER, y se está aagragando uno más al hacer fwrite($file, "$l\n");

Siendo así el contenido de tu archivo, podrías agregar el ENTER a tu nueva línea y dejar las demás cómo están:

...
array_unshift($data, "$id,$name\n");
...
foreach($data as $l){
  fwrite($file, "$l");
}
...

Saludos cordiales!

1voto

Botxtrem-Solutions comentado

Gracias ya esta solucionado Saludes

0voto

Botxtrem-Solutions comentado

Hola disculpa pero provando tu solucion me da el error que al añadir linesa al csv elimina otras supongo que es por la forma en qu ese abre el archibo

2votos

Leonardo-Tadei comentado

Agregá un print de $l en el foreach para ver las líneas que pasan por el bucle... file() lee todas las líneas, así que no debería faltarte ninguna.

También revisá el archivo, no sea cosa que creas que tenga un contenido y en realidad tenga otro después de sucesivas pruebas.

Si estás viendo como queda el archivo en el navegador, también fijate que no estés viendo en la caché una versión anterior.

1voto

Botxtrem-Solutions comentado

Grcias ya descubri que no es ese el problema formulare otra pregunta con el codigo que me da problemas Gracias

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta