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

Résolu
jeanos -  
 le père -
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

le père
 
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   Statut Membre Dernière intervention   13
 
T'as pensé à utiliser la méthode implode (;) ;

Voir www.php.net pour la syntaxe
0
jeanos
 
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
le père
 
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
le père
 
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
jeanos
 
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   Statut Membre Dernière intervention   13
 
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
le père
 
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