Page 1 sur 1

Csv : lire/écrire

Posté : 07 févr. 2020, 03:56
par Jefekoi
Bonjour à tous,


J'arrive à lire un CSV
$row = 1;
if (($handle = fopen("mon.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
echo "<p> $num champs à la ligne $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
Il est facile à trouver ce genre de source sur le net.

Par contre un truc qui me casse la tête depuis quelques jours,
c'est que j'ai deux fichiers CSV
Je charge le premier (pas de problème) je charge le second (pas de problème)

Là ou je n'arrive pas à m'en sortir c'est que je voudrais enregistrer le résultat des deux fichiers en 1 seul (CSV)

Pour corser un peu dans les deux fichier en ligne 1 il y a les noms des colonnes, il va de soit que dans le fichier je ne voudrais pas voir 2 fois la même ligne (les titres des colonnes)

Je ne suis pas maitre des deux fichiers (ils changent suivant divers données externe)


En image voilà ce que je voudrais obtenir
Image

Merci beaucoup pour votre aide.


Eric

Re: Csv : lire/écrire

Posté : 07 févr. 2020, 09:02
par Spols
Si la structure des 2 fichiers est toujours la même même nombre de colonne et même intitulé ce n'est pas très difficile.
Si dans ton bout de code tu enregistre les donnée dans un tableaux plutot que de les afficher avec echo tu pourras aisément tout mettre dans le même tableau en ommetant la première ligne du second fichier et ensuite réécrire un nouveau fichier.

Il n'est même pas nécéssaire de parcourir toutes tes lignes si tu ne cherche qu'a fusionner tes fichiers.
file_get_content() permet d'obtenir tout le contenu en une chaine de caractère avec un peu de traitement sur le second fichier tu peux enlever les entête de colonnes et simplement assemblé les deux chaines en une. une rechere du premier saut de ligne et un substr devrait suffire.

Re: Csv : lire/écrire

Posté : 07 févr. 2020, 19:01
par Jefekoi
Merci pour tes conseils, mais là déjà je n'arrive pas à enregistrer mon essai
$page = file_get_contents($nomCSV);

$out = fopen('test.csv', 'w');
fputcsv($out, $page);
fclose($out);

Re: Csv : lire/écrire

Posté : 07 févr. 2020, 20:38
par Jefekoi
Ce n'est peut être pas joli joli mais j'ai trouvé
$fichier = fopen("Info.csv", 'w'); // j'efface le contenu du fichier
fclose($fichier);

$a = file_get_contents("FichierA.csv");
$b= file_get_contents("FichierB.csv");

$nomFichier="Info.csv";
AjoutEnregistrement($nomFichier, $b);
AjoutEnregistrement($nomFichier, $a);

function AjoutEnregistrement($nomFichier, $chaine){
$fp = fopen ($nomFichier,"a+");
$int= fwrite ($fp, $chaine );
$int=fclose($fp);
}