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 :

parser un CSV avec 24 colonnes=24 classes ?


Sujet :

Langage PHP

Vue hybride

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut parser un CSV avec 24 colonnes=24 classes ?
    Bonsoir,

    je lis un fichier CSV et je compte analyser chaque colonne. Ce que je pensais faire, c'est créer une classe pour chaque colonne, comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (false !== ($fields = fgetcsv($handle, $buffer, $this->sep)) ) {     
                    $line_csv=[];    
                    $line_csv[0]=new Field0($fields[0]);
                    $line_csv[1]=new Field1($fields[1]);
                    ...
                    $line_csv[23]=new Field23($fields[23]);

    donc pour la colonne X $line_csv[X]=new FieldX($fields[X]); avec la classe FieldX :
    FieldX :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    namespace Classes\Olivier;
     
     
    class FieldX
    {
        private $name;
       /* Constructor */
    public function __construct($value)
      {
        if (is_string($value))
            $this->name=$value;
      }
     
    public function __tostring()
      {
          return($this->name);
      }    
    } //end FieldX
    Ca fait un code sacrément lourd (et plein de boulot). Comme je pense (et espère) qu'on peut faire mieux, j'ai pas été loin. Quelle amélioration me proposez-vous ?

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    salut Laurent

    Citation Envoyé par laurentSc
    parser un CSV avec 24 colonnes=24 classes ?
    tu dérailles ou quoi ?
    Ce n'est parce que tu t'es mis à la prog objet qu'il faut te sentir obligé de pondre des classes à tout bout de champ !
    Bon sens, raisonnement et simplicité : voilà, ce que tu dois utiliser en premier.

    Alors fais toi une simple fonction de validation d'un ligne du csv et puis c'est tout : utilise les closures si tu veux mais par pitié ne t'embarque pas dans 24 classes !

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    Non, je ne déraille pas et il était clair que c'était lourdingue, donc je me suis très vite arrêté mais je n'avais pas d'idée comment faire simple et j'avoue que je sèche encore ; peux-tu préciser comment utiliser les closures ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    liste d'abord les tests de validation que tu souhaites faire.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 495
    Billets dans le blog
    1
    Par défaut
    En fait, pour l'instant, je ne vois que des tests de type (is_string ou is_integer ou une date (je sais faire)) avec éventuellement au préalable une manipulation (exemple : un champ "id" avec un préfixe INC, donc d'abord supprimer le préfixe puis vérifier si le reste est bien integer).

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    pour les tests natifs, t'as besoin de rien pour ceux qui nécessitent un peu plus, tu peux faire dans ce style (closure) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $is_date = function($date): bool {
        $formats = ['M d, Y', 'M d Y', 'M d', 'M-d'];
        foreach ($formats as $f) {
            if (\DateTime::createFromFormat($f, $date) !== false) {
                return true;
            }
        }
        return false;
    };

Discussions similaires

  1. Réponses: 16
    Dernier message: 11/09/2016, 21h32
  2. Réponses: 6
    Dernier message: 09/01/2015, 16h38
  3. Réponses: 2
    Dernier message: 24/01/2014, 15h27
  4. [XL-2010] Fusion csv avec ajout colonne
    Par W.Dogui dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/05/2013, 00h01
  5. Réponses: 3
    Dernier message: 10/05/2007, 15h12

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