IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fgets invente un point-virgule


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut fgets invente un point-virgule
    Bonjour,

    je traite des fichiers CSV et pour déterminer le header, j'utilise fgets :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (isset(self::$handle)) {
                $row = fgets(self::$handle);
                $row=strtolower($row); //mettre header en minuscules
            } // doit contenir les en-têtes des colonnes}
            if (empty($row)) {
                self::$errors[] = 'The file is empty';
                return false;
            }
    self::$header = explode(self::$separator, str_replace(self::$enclosure, '', trim($row, "\r\n")));
    Mon problème se situe ligne 2 car fgets rajoute un point-virgule à la fin.

    Ligne du fichier CSV :
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    SESAID,"ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE","GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE","REPORTINGENTITY","BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"
    et $row
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $row=""sesaid,""alternateids"",""platform"",""platformowner"",""publisher"",""applicationname"",""hfmcode"",""currentlyactive"",""activatedate"",""deactivatedate"",""groupname"",""officecountry"",""firstname"",""lastname"",""companyname"",""jobcode"",""reportingentity"",""businessunitname"",""location"",""internetaddress"",""managerfirstname"",""managerlastname"",""manageremail""";
    "
    Que faudrait-il faire ?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Ligne du fichier CSV :
    Code csv : Sélectionner tout - Visualiser dans une fenêtre à part
    SESAID,"ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE","CURRENTLYACTIVE","ACTIVATEDATE","DEACTIVATEDATE","GROUPNAME","OFFICECOUNTRY","FIRSTNAME","LASTNAME","COMPANYNAME","JOBCODE","REPORTINGENTITY","BUSINESSUNITNAME","LOCATION","INTERNETADDRESS","MANAGERFIRSTNAME","MANAGERLASTNAME","MANAGEREMAIL"
    Comment t'y prends-tu pour obtenir ceci ? Tu ouvres ton fichier CSV avec Excel ?

    Que faudrait-il faire ?
    fgets() ne sort pas un ; de null part.
    Que faire ? Simplifier ton développement, lire ton CSV uniquement avec la fonction dédiée fgetcsv() et arrêter de vouloir faire des auto-détections.
    Parce que là franchement, c'est compliqué pour rien, et bugogène à mort tout ça.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Je viens d'expliquer dans l'autre discussion que j'édite le fichier CSV avec PHPSTORM.

    Citation Envoyé par Séb. Voir le message
    arrêter de vouloir faire des auto-détections.
    C'est quoi les auto-détections ?

    Citation Envoyé par Séb. Voir le message
    lire ton CSV uniquement avec la fonction dédiée fgetcsv()
    Le souci est que cette fonction nécessite un délimiteur et un séparateur et que lorsque j'exécute ce code, ils ne sont pas encore connus. Peux-tu me dire comment tu ferais ?

  4. #4
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Points : 3 076
    Points
    3 076
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Le souci est que cette fonction nécessite un délimiteur et un séparateur et que lorsque j'exécute ce code, ils ne sont pas encore connus. Peux-tu me dire comment tu ferais ?
    Bonjour

    Ne peux-tu pas exiger un format précis ? C'est un peu casse-gueule sinon, avec ou sans délimiteur, virgule ou point-virgule ? C'est du bricolage de le détecter automatiquement ?

    Ne peux-tu pas savoir que les fichiers venant de telle source c'est avec... Et ceux venant de... C'est avec...?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'ai fait ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset(self::$handle)) {
                rewind(self::$handle);//pointer au début du fichier
                $header = fgetcsv(self::$handle,0,",",'"');
                ...
    pour voir et le $header vaut :
    array(23) {
    [0]=>
    string(11) ""SESAID""
    [1]=>
    string(12) "ALTERNATEIDS"
    [2]=>
    string(8) "PLATFORM"
    [3]=>
    string(13) "PLATFORMOWNER"
    [4]=>
    string(9) "PUBLISHER"
    [5]=>
    string(15) "APPLICATIONNAME"
    [6]=>
    string(7) "HFMCODE"

    etc
    donc ça baigne sauf le 1er élément, vu que la chaîne de caractères est encadrée par des doubles-quotes.

    PHPSTORM (mon IDE) donne ça pour la 1e ligne :
    "SESAID","ALTERNATEIDS","PLATFORM","PLATFORMOWNER","PUBLISHER","APPLICATIONNAME","HFMCODE",etc
    Comment faire pour se débarrasser de ces doubles-quotes ?

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Comment faire pour se débarrasser de ces doubles-quotes ?
    C'est sûrement un problème lié au BOM du fichier CSV.
    Comment le gères-tu ?

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Honnêtement, le code pour lire les fichiers CSV n'est pas de moi. La seule chose concernant le BOM est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            $char = mb_substr($row, 0, 1); // premier caractère
            if ($char === "\xef\xbb\xbf") {  //if first character is BOM, one begins with the next character
                $row  = mb_substr($row, 1);
                $char = mb_substr($row, 0, 1);
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CSV] Problème avec CSV et point virgules
    Par Lotz dans le forum Langage
    Réponses: 6
    Dernier message: 09/03/2006, 16h11
  2. [xhtml] représenter le point virgule
    Par nmujdzic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/05/2005, 22h51
  3. [FLASH MX] Problème de point virgule
    Par noarno dans le forum Flash
    Réponses: 4
    Dernier message: 20/07/2004, 16h24
  4. lire le point-virgule dans un fichier .ini
    Par juflata dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/07/2004, 13h46
  5. [LG]Point virgule
    Par Louis-Guillaume Morand dans le forum Langage
    Réponses: 17
    Dernier message: 07/06/2003, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo