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 :

lecture de csv : séparateur virgule et un des champs peut en contenir [PHP 7]


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 468
    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 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut lecture de csv : séparateur virgule et un des champs peut en contenir
    Bonsoir,

    le problème est résumé dans le titre. Voici le code de lecture du CSV :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      while (($row = fgetcsv($this->handle, $this->buffer, (string)$this->separator, $enclosure)) !== false) {
                 $this->data[] = array_combine($this->header, $row);
                }
    Le souci, si le séparateur est une virgule, se pose si un des champs du CSV contient une virgule : le code va prendre la valeur pour 2 champs consécutifs, alors qu'il n'y en a qu'un seul. Comment gérer cela ?

    chez moi, le souci se pose sur des dates : le fichier CSV contient une date de ce genre : Jul 26, 2018. Le code voit 2 valeurs, alors qu'il y en a une seule (et y a pas d'enclosure : $enclosure="";)

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    ça veut juste dire que ton csv est mal-formé.
    C'est pour ça qu'on utilise un caractère d'encadrement. Les valeurs contenant des espaces comme Jul 26, 2018, doivent être notées dans le csv : "Jul 26, 2018".

    Avec un csv mal-formé, c'est très compliqué.

    En tout cas bon courage. Il faut dire aux gars qui te fournissent les csv de les formater selon les normes en vigueur. C'est de l'informatique, pas de la magie.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 468
    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 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Mon interlocuteur qui me fournit les CSV convient du souci : il se préoccupe de mettre systématiquement un encadrement dans ce cas.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Laurent, ça fait des mois que tu "bricoles" sur ces CSV...

    QUAND vas-tu faire une liste exhaustive de tous les cas particuliers que tu peux rencontrer ?

    Ce n'est que comme ça que tu auras une vision globale, et que tu pourras adapter une méthodologie stricte et efficace.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 468
    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 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Mon souci présent, c'est que depuis des mois (en effet, fin septembre), je testais toujours avec le même CSV, donc ce problème de virgule dans une valeur, je venais de le découvrir...(d'ailleurs, suite à une remarque de rawsrc, j'ai aussi constaté que ma conception n'était pas bonne et je reprends tout à 0).

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    purée, heureusement que t'as pas de délai à tenir...
    Septembre 2019 -> avril 2020 sur un seul CSV à parser et dire le 17 avril 2020, on recommence tout à zéro, la vache !!

    Je me poserais la question s'il est réellement utile de parser ce CSV... 8 mois à s'en passer, c'est que le gars qui te l'a demandé n'en a pas vraiment besoin, si ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    @rawsrc

    frankensteinSc a l'habitude de maltraiter les codes.
    Donne-lui un code qui fonctionne, et il trouvera toujours le moyen de le mettre en pièces...


    Citation Envoyé par jreaux62 Voir le message
    QUAND vas-tu faire une liste exhaustive de tous les cas particuliers...
    1- Ce n'est pourtant pas la mer à boire :
    • "delimiters" (séparateur de champ) possibles : la virgule (défaut) ou le point-virgule (ou autre ?)
    • "enclosures" (encadrement de texte) possibles : le double-quote (défaut) ou le quote (ou autre ?)
    • si le champs contient un espace, (normalement) il est entouré par ces "enclosures"
    • -> à vérifier si c'est aussi le cas s'il contient une vigule, un point-virgule, et/ou tout autre ponctuation
    • ...

    2- Des fonctions PHP, censées "faire le job" toutes seules :

    3- Et demander à ton "fournisseur" qu'il t'envoie uniquement des CSV correctement formatés !

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 468
    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 468
    Points : 5 826
    Points
    5 826
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    8 mois à s'en passer, c'est que le gars qui te l'a demandé n'en a pas vraiment besoin, si ?
    Il fait autrement : ce que je développe est un outil qui remplacera une opération manuelle...

    Citation Envoyé par jreaux62 Voir le message
    3- Et demander à ton "fournisseur" qu'il t'envoie uniquement des CSV correctement formatés !
    C'est fait depuis hier.

    fgetcsv, je l'utilise mais pas besoin de fputcsv.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    ...qui remplacera une opération manuelle...
    Même avec les 2 bras cassés, il irai encore plus vite que toi !

    C'est fait depuis hier.
    Après 8 mois... Bel effort !


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

Discussions similaires

  1. CSV -> Excel : Virgule comme séparateur par défaut
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/07/2010, 09h19
  2. Lecture CSV et verification ordre des champs
    Par vincent62149 dans le forum VB.NET
    Réponses: 9
    Dernier message: 11/12/2009, 11h34
  3. [CSV] Remplacer les points par des virgules
    Par johnkro dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2008, 19h25
  4. [VBA-E] Création Fichier csv (séparateur Virgule)
    Par dev_php51 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2008, 11h39
  5. Importer un fichier csv (séparateur virgule) dans un classeur excel 2003
    Par Valérie32 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/06/2008, 21h44

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