Comment modifier les regles de gestion des CSV ?

Comment modifier les regles de gestion des CSV ? - PHP - Programmation

Marsh Posté le 05-02-2014 à 17:42:11    

Bonjour ,
 
J'ai une question un peut spéciale concernant le php, et plus précisément sa gestion des CSV.
 
voila j'ai remarqué que certains retours à la ligne dans des cellules de fichiers excel ou libre office une fois passé en csv était interprété par PHP mais aussi notepad++ comme une nouvelle ligne.
 
hors ça peut vite foutre la merde de ne pas avoir le bon nombre de ligne.  
 
comment modifier les règles de gestion des retours à la ligne dans php (pour notepad++ je m'en fout un peut mais si quelqu'un a une solution je suis preneur)
 
Merci  

Reply

Marsh Posté le 05-02-2014 à 17:42:11   

Reply

Marsh Posté le 06-02-2014 à 09:34:47    

Tu regardes les choses à l'envers, le problème n'est pas comment lire correctement le fichier mais comment le créer correctement.
 
Soit tu vires tes retours à la ligne soit tu tentes de définir tes chaînes à l'aide de guillemets mais je ne suis même pas sûr qu'au niveau du parsage les guillemets suffisent.

Reply

Marsh Posté le 06-02-2014 à 10:08:40    

oui mais le problème c'est que le fichier csv je ne peut pas le modifier comme ça, c'est sur je me suis dit, "bah c'est le fichier qui est merdique"
mais tout bien réfléchit il faut mieux régler un problème plutôt que de le contourner.

 

bref j'ai vue que les retours chariots sont affiché LF et les fins de lignes étaient notées CR/LF, je me suis dit bha easy, je fout CR/LF en $escape pour mon fgetcsv et c'est réglé, mais ... je vois pas comment reproduir le CR/LF j'ai essayer de la traduire en php \r\n mais marche po .

 

 
 


Message édité par Djeweler le 06-02-2014 à 10:09:40
Reply

Marsh Posté le 06-02-2014 à 10:34:08    

Essaye le copier/coller d'un retour à la ligne en prenant le dernier caractère, le saut et le premier caractère, tu effaces tes 2 caractères et peut-être que tu auras ce que tu veux.
 
 
Autrement tu peux faire ton propre parsing : http://us3.php.net/manual/en/funct [...] .php#98800

Reply

Marsh Posté le 06-02-2014 à 10:39:24    

le copier coller marche pour le LF mais pas pour le CR... harrr c'est rageant.
 
pour le parsing je comprend que-dalle faut dire que j'ai que quelques mois de dev derrière moi


Message édité par Djeweler le 06-02-2014 à 11:53:17
Reply

Marsh Posté le 06-02-2014 à 12:06:02    

Au pire tu reprends la fonction qu'a fait le bonhomme :
 

Code :
  1. function csvstring_to_array(&$string, $CSV_SEPARATOR = ';', $CSV_ENCLOSURE = '"', $CSV_LINEBREAK = "\n" ) {
  2.   $o = array();
  3.   $cnt = strlen($string);
  4.   $esc = false;
  5.   $escesc = false;
  6.   $num = 0;
  7.   $i = 0;
  8.   while ($i < $cnt) {
  9.     $s = $string[$i];
  10.     if ($s == $CSV_LINEBREAK) {
  11.       if ($esc) {
  12.         $o[$num] .= $s;
  13.       } else {
  14.         $i++;
  15.         break;
  16.       }
  17.     } elseif ($s == $CSV_SEPARATOR) {
  18.       if ($esc) {
  19.         $o[$num] .= $s;
  20.       } else {
  21.         $num++;
  22.         $esc = false;
  23.         $escesc = false;
  24.       }
  25.     } elseif ($s == $CSV_ENCLOSURE) {
  26.       if ($escesc) {
  27.         $o[$num] .= $CSV_ENCLOSURE;
  28.         $escesc = false;
  29.       }
  30.       if ($esc) {
  31.         $esc = false;
  32.         $escesc = true;
  33.       } else {
  34.         $esc = true;
  35.         $escesc = false;
  36.       }
  37.     } else {
  38.       if ($escesc) {
  39.         $o[$num] .= $CSV_ENCLOSURE;
  40.         $escesc = false;
  41.       }
  42.       $o[$num] .= $s;
  43.     }
  44.     $i++;
  45.   }
  46. //  $string = substr($string, $i);
  47.   return $o;
  48. }


 
En espérant que le line_breaker \n fonctionne comme tu le voudrais. Par contre il faut passer une string dans sa fonction et non un fichier donc tu dois préalablement récupérer le contenu du fichier.
 
 
Autrement tu as http://fr.wikipedia.org/wiki/Carriage_Return_Line_Feed et donc avec chr(13) et chr(10) tu devrais t'en sortir.

Reply

Marsh Posté le 06-02-2014 à 16:43:13    

j'ai comme l'impression que ça ne détecte pas les caractères spéciaux. je vais fouiner du coté des fonctions str_replace et  ereg_replace

Reply

Sujets relatifs:

Leave a Replay

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