[PHP] Ecrire un CSV

Résolu
V3n1 Messages postés 294 Date d'inscription   Statut Membre Dernière intervention   -  
justoo76 Messages postés 186 Date d'inscription   Statut Membre Dernière intervention   - 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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   56
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   56
 
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   Statut Membre Dernière intervention   13
 
Tu peux peu être essayer un str_replace(), tu supprime les éventuelles guillemets.
0