[PHP] Ecrire un CSV

Résolu/Fermé
V3n1 Messages postés 294 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 12 décembre 2010 - Modifié par V3n1 le 2/06/2010 à 11:44
justoo76 Messages postés 186 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 23 mars 2016 - 2 juin 2010 à 14:11
Bonjour,

Je suis actuellement en train de créer une application qui lit un fichier CSV, qui construit ensuite un tableau en mettant en ordre les informations, puis créer un nouveau fichier CSV en écrivant les informations nécéssaires.

En faite, le problème ce n'est pas que je n'arrive pas à écrire sur un nouveau fichier, le problème c'est que le séparateur est une virgule alors que je voudrais que ce soit un point virgule.
Quand j'ouvre mon fichier CSV avec Excel, tout est dans la première cellule alors que normalement chaque information devrait être dans une cellule. (même si c'est un CSV.) J'espère que vous me suivez.
De plus, certain de mes champs sont sous guillemets et certain non.. Je ne comprend pas..



Je ne sais pas si je me suis bien exprimé alors je vous donne une partie de mon code pour vous faciliter la tache.

 /**  
  * Renommer le fichier sur le serveur 
 * Ouverture du fichier   
  */  
 $file = $_FILES['file']['tmp_name']; 
 $handle = fopen($file,'r'); 
  
 /**  
   * Déclaration des attributs 
  * @var ARRAY $myTable  
     */  
 $myTable = array(); 
  

 while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) { 
   
  // Construction d'un tableau ordonné intermédiaire 
  $data_order = array($data[4].' '.$data[8].' '.$data[1],$data[9],$cat,$data['8'],$data['1'],$data['12'],$data[     '11'],$data['13'],$data['6'],$data['10'],$data['16'],$data['14'],$data['15'],$data['4'],$data['7']); 
   
  // Ajout du tableau ordonné dans un tableau global 
  $myTable[] =  $data_order; 
  
 } 


  
 /**  
   * Déclaration d:u chemin où le nouveau fichier sera crée 
  * Génèration unique et aléatoirement d'un nom de fichier 
     */  
 $rep = "import/";  
 $nom_fichier = "importcvs_".random(5).".csv"; 
 $chemin = $rep.$nom_fichier; 
  
   /**  
  * Ouverture d'un nouveau fichier csv en écriture 
  */  
  if ($f = fopen($chemin, 'w')) { 
    
    /**  
   * Ecriture 
    */  
   foreach ($myTable as $ligne) { 
    fputcsv($f, $ligne); 
   } 
   fclose($f); 
  } 
  else  
  { 
   "Impossible d'accéder au fichier."; 
  } 




Merci par avance d'avoir pris du temps à me consacrer.

Cordialement.



"Se prépare un déluge mais nous ne sommes pas nées de la dernière pluie"
A voir également:

2 réponses

justoo76 Messages postés 186 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 23 mars 2016 13
2 juin 2010 à 11:46
Bonjour,

Déjà, tu peut modifé les parametres de .cvs, et mettre un point virgule à la place d'une virgule (Ton while recherche des ";" !! )
0
V3n1 Messages postés 294 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 12 décembre 2010 56
2 juin 2010 à 11:56
Non lol, j'ai du vraiment mal m'exprimer.

En faite, le while permet de lire mon premier fichier CSV. Ensuite ma boucle me permet de construire un tableau global qui contient des tableaux(un tableau => à chaque ligne).

Maintenant je voudrais créer un nouveau fichier CVS avec mes nouvelles informations et utilisé comme séparateur un point virgule.
0
justoo76 Messages postés 186 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 23 mars 2016 13
2 juin 2010 à 12:18
ah ok dsl, mais je vois pas ce qui cloche :( Tu ouvre avec EXCEL ? Moi je sais que mes csv sous open office calc, avaient des guillmets et virgules...
0
V3n1 Messages postés 294 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 12 décembre 2010 56
2 juin 2010 à 12:21
J'aimerais juste que mon nouveau CSV aie comme séparateur un point virgule.. car j'en ai besoin pour une autre application
0
justoo76 Messages postés 186 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 23 mars 2016 13
2 juin 2010 à 12:23
lol oui j'ai bien comprit mais j'ai fait quelques recherches et ton code à l'air bon... Dsl là je sèche
0
V3n1 Messages postés 294 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 12 décembre 2010 56
2 juin 2010 à 12:40
J'ai trouvé !!!!!!

C'était tout con en faite.. Fallait juste spécifier le séparateur à la fonction fputcsv, comme pour la fonction fgetcsv. Par contre il continue à mettre des guillemets seulement sur certain champs .. bô !

fputcsv($f, $ligne, ";");
0
justoo76 Messages postés 186 Date d'inscription mardi 13 avril 2010 Statut Membre Dernière intervention 23 mars 2016 13
2 juin 2010 à 14:11
Tu peux peu être essayer un str_replace(), tu supprime les éventuelles guillemets.
0