[Résolu]Lecture d'un fichier csv

Lecture d'un fichier csv [Résolu] - PHP - Programmation

Marsh Posté le 21-02-2009 à 11:56:53    

Bonjour
 
Voila, lors de la lecture d'un fichier csv je voudrais que les données soient affichées par colonne et non pas par ligne pour que je puisse par ce biais additionner les colonnes entre elles et pouvoir mettre des tables valables (pour moi) sous sql
 
Voila la portion de code :
 
 

Code :
  1. $ARRAY[0]=fgetcsv($FILE,1024,$separateur);      // lire ligne par ligne => doit etre "lire colonne par colonne"
  2. $width=sizeof($ARRAY[0]);


 
 
Et mon tableau csv est de la forme :
 

Code :
  1. Varibable 1                     VAR 2                  VAR3                     VAR4
  2.     34                          33                       65                       90
  3.     55                          45                       65                       43


ect ...


Message édité par toughzaa le 25-02-2009 à 11:47:43
Reply

Marsh Posté le 21-02-2009 à 11:56:53   

Reply

Marsh Posté le 22-02-2009 à 05:07:04    

Tu peux pas récupérer les colonnes à partir des lignes :??:
 
Truc du genre
 

Code :
  1. $data = fgetcsv($FILE,1024,$separateur);
  2. $somme_var1 = 0;
  3. while (($data = fgetcsv($FILE,1024,$separateur)) !== FALSE) {
  4.    $somme_var1 += $data[0];
  5.    ...
  6.    $query = "INSERT INTO repose_miam_miam (col1,col2,...) VALUES ($data[0], $data[1],...)";
  7.    ...
  8. }


---------------
oui oui
Reply

Marsh Posté le 22-02-2009 à 11:11:33    

Merci pour votre réponse
Cependant, comment récupérer le nom des colonnes sachant que ceux sont la première ligne donc $data[0]..
J'ai pensé à inclure les données du fichier csv dans la base en pouvant les manipuler plus facilement comme en les triant ... : le nom de la table correspond au nom du fichier csv, et les champs correspondant aux colones
Pouvez-vous donc m'adapter l'instruction sql insert into ?
Encore merci

Reply

Marsh Posté le 22-02-2009 à 13:47:32    

dans mon code, $data[0] n'est pas la première ligne mais la première colonne de la ligne en cours.

 

le nom des colonnes est donné par la première ligne du fichier, donc par le premier appel à la fonction (ligne 1).

 

change juste le nom de la variable ($data -> $champs)


Message édité par art_dupond le 22-02-2009 à 13:49:56

---------------
oui oui
Reply

Marsh Posté le 23-02-2009 à 11:07:51    

et la ligne sous la colonne $data[0] correspond à $data[1] ?
Et pour l'instruction sql, ne pouvons savoir combien il y a de colonnes, n'y a t'il une fonction qui inclut toutes les colonnes quels que soient leur nombre ?

Reply

Marsh Posté le 23-02-2009 à 21:57:32    

Up

Reply

Marsh Posté le 24-02-2009 à 15:51:21    

Merci art_dupond j'ai pu créé la table ainsi que les différents colonnes en tant que champs
Maintenant, l'inclusion pose problème : je ne peux pas utiliser une boucle. De plus, même connaissant le nombre de colonnes, je ne sais comment faire
 

Code :
  1. INSERT INTO $nom_de_la_table VALUES ($LA_CA_POSE_PROBLEME)


Message édité par toughzaa le 24-02-2009 à 16:01:12
Reply

Marsh Posté le 25-02-2009 à 11:36:51    

yop,
 
 
tu pourrais créer ta chaine par pitits bouts ?
 
 

Code :
  1. $strChamps = $champs[0];
  2. for(int $i=1;$i<count($champs);$i++)
  3. {
  4.    $strChamps.= ','.$champs[$i];
  5. }


 
maintenant, $strChamps contient nomColonne1,nomColonne2,...
 
 
 
idem pour les valeurs dans la boucle,
 
puis (toujours dans la boucle)
 

Code :
  1. $query = "INSERT INTO repose_miam_miam (".$strChamps." ) VALUES (".$strValues." )";


---------------
oui oui
Reply

Marsh Posté le 25-02-2009 à 11:48:38    

Merci beaucoup art_dupond

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed