[php->csv] problème de séparateur

Résolu/Fermé
jeanos - 15 déc. 2009 à 15:40
 le père - 15 déc. 2009 à 16:33
echo "Bonjour,";
J'ai un fichier .csv généré par php. Jusque là aucun problème sauf que lorsque je met ";" comme séparateur il apparaît dans le csv une virgule. J'ai testé en changeant le ";" par ":"...et il apparaît bien ":".

Voici un extrait de code, pour l'exemple et un extrait du résultat(csv).
//php
$nom_file="stats.csv";//$nom_file="stats".$tdj.".csv";
$champs = array (
"; ; REPORT DE 2008; ; ; ENTREE 2009; ; ; SORTIE 2009 ;; ;;",
"; ; Homme; Femme; Total; Homme; Femme; ; Homme; Femme; Total",
"Ligne 1 - ;",


//=>csv
," "," REPORT DE 2008"," "," "," ENTREE 2009"," "," "," SORTIE 2009 ",," ",,
," "," Homme"," Femme"," Total"," Homme"," Femme"," "," Homme"," Femme"," Total"
"Ligne 1 - ",

Merci si vous avez une idée(et non je veut un ; comme séparateur, ça serait trop simple sinon).
A voir également:

7 réponses

Bonjour

Si tu nous montrais plutôt le code qui génère ton csv ? Car les ; que tu montres sont dans un array de chaînes, ce qui n'a pas grand rapport avec le fait que le csv soit généré avec des ; ou des ,
0
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
15 déc. 2009 à 16:06
T'as pensé à utiliser la méthode implode (;) ;

Voir www.php.net pour la syntaxe
0
Ah pardon je me suis trompé de bout de code, voila comment je généres le .csv
et
//champs étant l'array plus haut
$fp = fopen($nom_file, 'w') or die();// verif fopen, write et fclose ==OK + mode (ecraser fichier)

foreach ($champs as $line) {

fputcsv($fp, split(';', $line));
}

fclose($fp);
0
Surtout ne pas utiliser implode pour générer du csv. Ça ne marche pas, en particulier si les champs contiennent des ;. Il y a des fonctions faites spécialement pour le csv en PHP et il ne faut utiliser qu'elles.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tu utilises fputcsv et tu as tout à fait raison.
Par contre, tu aurais dû lire la doc de la fonction pour l'utiliser. Le délimiteur est le 3ème paramètre ; par défaut, c'est la virgule. Si tu veux utiliser le ; :
fputcsv($fp, split(';', $line),";");
voir https://www.php.net/manual/fr/function.fputcsv.php

le ; qu'il y a dans split(';', $line) n'a aucun rapport avec le csv
0
Ah merci beaucoup Le Pèpère, j'ai lut la doc mais j'ai loupé cette partie.
Je me doutais que je passait à côté d'un truc bête.
0
toto1983 Messages postés 205 Date d'inscription samedi 16 mai 2009 Statut Membre Dernière intervention 25 mars 2010 13
15 déc. 2009 à 16:30
En même temps si tu veut générer du csv je pense que tu dois lier les lignes d'un tableau avec le séparateur ";"
en utilisant implode, split te permettra pas de faire ce que tu voudras
0
si tu veut générer du csv je pense que tu dois lier les lignes d'un tableau avec le séparateur ";"
Tu insistes... Non, justement, c'est ce qu'il ne faut pas faire.
Le csv, ce n'est pas simplement de mettre des ; entre des bouts de texte. Ce n'est pas beaucoup plus, mais un peu plus quand même.
0