Lire mon fichier csv a partir de la deuxième ligne

Lire mon fichier csv a partir de la deuxième ligne - PHP - Programmation

Marsh Posté le 27-12-2011 à 17:10:38    

Code :
  1. <?php
  2. $row=1;// cela va nous permettre de passer d'une ligne à l'autre.
  3.  
  4. $fichier = $_FILES['fichier']['name'] ;
  5. $elementsChemin = pathinfo($fichier);
  6. $extensionFichier = $elementsChemin['extension'];
  7. $extensionsAutorisees = array("csv" );
  8.  
  9. if (!(in_array($extensionFichier, $extensionsAutorisees)))
  10. {
  11.      echo "<script langage='javascript'>alert('Le fichier n\'a pas l\'extension attendue');</script>";
  12.      include("formulaire.php" );
  13. } else {    
  14.    // Copie dans le repertoire du script avec un nom
  15.    // incluant l'heure a la seconde pres
  16.    $repertoireDestination = dirname(__FILE__)."/";
  17.    $nomDestination = "fichier_du_".date("YmdHis" ).".".$extensionFichier;
  18.  
  19.    move_uploaded_file($_FILES["fichier"]["tmp_name"],$repertoireDestination.$nomDestination);
  20.     
  21.  
  22.  
  23. $handle = fopen($nomDestination, "r" ); //on ouvre le fichier .csv
  24.  
  25. if($handle !== false){ // on vérifie si le fichier existe, si oui on exécute le code qui arrive après.
  26.  
  27.  
  28. for($row!=0;$row<=1000;$row++){  //ici on effectue une boucle qui va parcourir le fichier de la ligne 1 à la ligne 4.
  29. $data = fgetcsv($handle, 1024, "," );  // ici on récupère les valeurs de la ligne qui se trouvent entre les virgules.
  30.  
  31. $valeur0=$data[0];
  32. $valeur1=$data[1]; // on récupère la 2ème valeurs.
  33. $valeur2=$data[2]; // on récupère la 3ème valeurs.
  34.  
  35. $fp=fopen("COARRI_DISCHARGE.csv", "a" );
  36. fwrite($fp,"$valeur0" );fwrite($fp,"\n" );
  37. fwrite($fp,"$valeur1" );fwrite($fp,"\n" );
  38. fwrite($fp,"$valeur2" );fwrite($fp,"\n" );
  39. fwrite($fp,"\n" ); //permet de faire un saut de ligne.
  40.    
  41. fclose($fp); // ferme $fp.
  42. }
  43.  
  44. fclose($handle);
  45. }
  46. }
  47. ?>


 
 
 
j'ai un fichier CSV que je lis pour récupérer les données et les mettrent dans un autres fichier CSV
Mon problème est que je n'arrive pas à lire à partir de la deuxième ligne
ce que j'aimerai faire car la première ligne correspond aux titres des colonnes;
Merci de m'aider

Reply

Marsh Posté le 27-12-2011 à 17:10:38   

Reply

Marsh Posté le 27-12-2011 à 23:20:15    

ben lire à partir de la seconde, c'est comme lire à partir de la première et ne pas recopier la première dans ton fichier destination


---------------
http://nisalon.labrute.com/
Reply

Marsh Posté le 28-12-2011 à 09:31:59    

nisalon_caje a écrit :

ben lire à partir de la seconde, c'est comme lire à partir de la première et ne pas recopier la première dans ton fichier destination


oui mais comment lui faire reconnaitre la seconde ligne ou lui dire que celle ci c'est la première que de l'ignorer

Reply

Marsh Posté le 28-12-2011 à 11:22:20    

Moi je mettrai tt le fichier dans une variable, apres un explode avec pour delimiteur un "retour a la ligne".
 
Puis apres ya plus qua copier le tableau de la 2e ligne jusqua la fin....

Reply

Marsh Posté le 09-01-2012 à 16:46:15    

donc tu fais

 
Code :
  1. $data = file_get_contents($filename) // On récupère tout le contenu du fichier
  2. $data = explode("\n",$data);  // On divise selon les lignes
  3. unset($data[0]); // On enlève la première
  4. $data = array_values($data); // On reconstruit notre tableau pour avoir des indices allant de 0 à n-1 au lieu de 1 à n (pas sur que cette ligne soit nécessaire pour l'implode, teste sans et dis moi)
  5. $data = implode("\n",$data); // On recolle


Message édité par nisalon_caje le 09-01-2012 à 16:46:45
Reply

Marsh Posté le 10-01-2012 à 01:41:40    

je propose ca,
pas testé mais ca devrait faire l'affaire.
 

Code :
  1. if (($handle1 = fopen("in.csv", "r" )) !== FALSE) { // ouvre fichier source
  2.     if (($handle2 = fopen("out.csv", "a" )) !== FALSE) { // ouvre fichier dest
  3.         $firstline = fgets($handle1, 4096); // on lit la premiere ligne pour faire bouger l'index sur la seconde.
  4.         while ((fputs($handle2,fgets($handle1, 4096),4096) !== FALSE); // tant que l'on peut copier du premier fichier (!eof) dans le second (string a ecrire !== false)
  5.         fclose($handle2);
  6.     }
  7.     fclose($handle1);
  8. }


---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Marsh Posté le 10-01-2012 à 10:00:05    

A titre informatif, vous partez tous sur l'idée qu'un fichier csv, c'est une ligne dans le fichier csv = une ligne de donnée.
On peut parfaitement échapper le "\n".
 
Je vous recommande d'utiliser la fonction native de php pour lire des CSV : http://www.php.net/manual/fr/function.fgetcsv.php


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 10-01-2012 à 12:31:24    

rufo a écrit :

A titre informatif, vous partez tous sur l'idée qu'un fichier csv, c'est une ligne dans le fichier csv = une ligne de donnée.
On peut parfaitement échapper le "\n".
 
Je vous recommande d'utiliser la fonction native de php pour lire des CSV : http://www.php.net/manual/fr/function.fgetcsv.php


 
a oui c'est vrai
 

Code :
  1. $delimiter = ',';
  2.     $enclosure = '"';
  3.     if (($handle1 = fopen("in.csv", "r" )) !== FALSE) { // ouvre fichier source
  4.         if (($handle2 = fopen("out.csv", "a" )) !== FALSE) { // ouvre fichier dest
  5.             $firstline = fgetcsv($handle1, 4096, $delimiter, $enclosure); // on lit la premiere ligne pour faire bouger l'index sur la seconde.
  6.             while ((fputs($handle2, $enclosure . implode($enclosure.$delimiter.$enclosure, fgets($handle1, 4096, $delimiter, $enclosure, $escape)).$enclosure.$delimiter.PHP_EOL,4096) !== FALSE); // tant que l'on peut copier du premier fichier (!eof) dans le second (string a ecrire !== false)
  7.             fclose($handle2);
  8.         }
  9.         fclose($handle1);
  10.     }


Message édité par pop-pan le 10-01-2012 à 12:31:57

---------------
[VDS] rail vesa, bras ecran, support TV / [ACH] des machins
Reply

Sujets relatifs:

Leave a Replay

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