Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2552 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Comment modifier les regles de gestion des CSV ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment modifier les regles de gestion des CSV ?

n°2218738
Djeweler
Posté le 05-02-2014 à 17:42:11  profilanswer
 

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  

mood
Publicité
Posté le 05-02-2014 à 17:42:11  profilanswer
 

n°2218779
MaybeEijOr​Not
but someone at least
Posté le 06-02-2014 à 09:34:47  profilanswer
 

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.

n°2218782
Djeweler
Posté le 06-02-2014 à 10:08:40  profilanswer
 

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
n°2218789
MaybeEijOr​Not
but someone at least
Posté le 06-02-2014 à 10:34:08  profilanswer
 

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

n°2218791
Djeweler
Posté le 06-02-2014 à 10:39:24  profilanswer
 

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
n°2218800
MaybeEijOr​Not
but someone at least
Posté le 06-02-2014 à 12:06:02  profilanswer
 

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.

n°2218821
Djeweler
Posté le 06-02-2014 à 16:43:13  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Comment modifier les regles de gestion des CSV ?

 

Sujets relatifs
Gestion de fichiers PHPBesoin d'aide pour fichier gestion absence en VBA
Injecter un fichier CSV avec un script phpWolf 3D , raycasting et gestion des vecteurs.
Pont entre ciel gestion commercial et SQL/php - OU Access voir autre..[HTML/JS] Créer et télécharger un fichier CSV avec ie
Difficulté dans la gestion alternée de deux formulairesQuoi modifier du PHP.INI pour remettre mon blog sur pied
[RESOLU][php]pb gestion des accents dans formulaire[ASP.NET] Modifier contenu page web sans programmation
Plus de sujets relatifs à : Comment modifier les regles de gestion des CSV ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR