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 :

Parsing de fichier et split de résultat. [PHP 5.3]


Sujet :

Langage PHP

  1. #21
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour parcourir un SplFileObject un simple foreach suffit

  2. #22
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Peux-tu m'en dire un peu plus? je ne vois pas comment tu veux faire avec un foreach.

    Et sinon, c'est ça? si je fait un While il ferme l'objet à la fin?

  3. #23
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par ArKam Voir le message
    Peux-tu m'en dire un peu plus? je ne vois pas comment tu veux faire avec un foreach.

    Et sinon, c'est ça? si je fait un While il ferme l'objet à la fin?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreache($parsedfile as $line)
    {
        $nblineRaw = $parsedfile->key();
    }
    mais bon tous ca sert a rien iterator_count est la pour ca...

  4. #24
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Merci pour le foreach, je vais voir ça.

    Par contre pour iterator_count, il me faudrait un objet itéré hors, $parsedfile ne l'est pas tant que je ne lui dit pas de parcourir le fichier ligne à ligne, ce qui reviens au même que de faire la boucle while et de compter les lignes parcouru.

  5. #25
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par ArKam Voir le message
    Merci pour le foreach, je vais voir ça.

    Par contre pour iterator_count, il me faudrait un objet itéré hors, $parsedfile ne l'est pas tant que je ne lui dit pas de parcourir le fichier ligne à ligne, ce qui reviens au même que de faire la boucle while et de compter les lignes parcouru.
    SplFileObject est un Iterator, donc iterator_count($parsedfile) te renvoie le nombre de ligne...

  6. #26
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    au temps pour moi
    SplFileObject extends SplFileInfo implements RecursiveIterator , Traversable , Iterator , SeekableIterator
    J'ai tester le foreach et ça marche du tonnerre, merci.

    Me manque deux trois trucs et mon script sera niquel

    Merci à tout les deux.

  7. #27
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par ArKam Voir le message
    au temps pour moi


    J'ai tester le foreach et ça marche du tonnerre, merci.

    Me manque deux trois trucs et mon script sera niquel

    Merci à tout les deux.
    mais il sert a rien le foreach si c'est juste pour savoir combien de ligne fait ton fichier...

  8. #28
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Et pour répondre à ta question, l'itérateur n'est pas supprimé à la sortie de ta boucle while, détruit-le à la main en mettant sa référence à null (il sera garbage collecté au petit bonheur la chance cependant - et si tu n'a pas PHP 5.3, il ne sera réelement libéré qu'a la fin du script).

  9. #29
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    @Benjamin:

    Je suis bien en 5.3 comme mis dans le Tag du sujet.
    Comment cela ce fait t'il que je ne puisse plus accéder à l'objet après le while dans ce cas?

    @stealth35:

    Je me sert de la boucle foreach pour d'autres opérations, notamment du parsing des lignes retournées.

  10. #30
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Comment cela ce fait t'il que je ne puisse plus accéder à l'objet après le while dans ce cas?
    A moins que tu ne sois dans une autre fonction / méthode (voir la portée des variables en PHP) cet objet n'a aucune raison d'être détruit après avoir été traversé.
    Si deux méthodes distinctes utilisent cette ressources, il serait de bon ton de mettre l'objet SplFileObject en propriété de classe ou d'instance.

  11. #31
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    A moins que tu ne sois dans une autre fonction / méthode (voir la portée des variables en PHP) cet objet n'a aucune raison d'être détruit après avoir été traversé.
    Si deux méthodes distinctes utilisent cette ressources, il serait de bon ton de mettre l'objet SplFileObject en propriété de classe ou d'instance.
    salut benjamin, je suis toujours dans la même fonction à ce moment là donc pas de soucis de portée.

    Par contre, peux tu m'expliquer ce que tu entend par:

    Citation Envoyé par Benjamin Delespierre Voir le message
    Si deux méthodes distinctes utilisent cette ressources, il serait de bon ton de mettre l'objet SplFileObject en propriété de classe ou d'instance.
    Je ne comprend pas trop ce dont tu me parle.

  12. #32
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Un cas d'uage serait il plus parlant ?

    Code : 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
     
    class MyClass {
      protected $_objects;
     
      public function __construct () {
        $this->_objects = new SplObjectStorage;
      }
     
      public function add (Object $object) {
         $this->_objects->attach($object);
      }
     
      public function remove (Object $object) {
        $this->_objects->detach($object);
      }
    }
    Dans cet exemple l'objet SplObjectStorage est utilisé par les méthodes MyClass::add et MyClass::remove, à cet effet on l'a mis en tant que propriété protégée de l'insance pour que les deux méthodes puissent l'utiliser. On appelle ça l'encapsulation

  13. #33
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Un cas d'uage serait il plus parlant ?

    Code : 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
     
    class MyClass {
      protected $_objects;
     
      public function __construct () {
        $this->_objects = new SplObjectStorage;
      }
     
      public function add (Object $object) {
         $this->_objects->attach($object);
      }
     
      public function remove (Object $object) {
        $this->_objects->detach($object);
      }
    }
    Dans cet exemple l'objet SplObjectStorage est utilisé par les méthodes MyClass::add et MyClass::remove, à cet effet on l'a mis en tant que propriété protégée de l'insance pour que les deux méthodes puissent l'utiliser. On appelle ça l'encapsulation
    Ah ok oui là c'est parfaitement clair, l'encapsulation me parle plus.

    Je me doutais bien que tu me parlais d'encapsulation, mais autant, je capte bien les concepts de la programmation objet, autant, je n'arrive absolument pas à me souvenir des termes utilisés pour les décrire.

    Encore merci à toi

    Je vous posterais un exemple de ce que fait le script, comme ça, ça pourra peut-être aider des gens

  14. #34
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    j'arrive un peu après la bataille mais tout ce que tu veux faire si j'ai compris c'est mettre en base un csv ou chaque champ correspond à un champ en base ..

    alors pourquoi reinventer la poudre .. une commande mysql existe déjà:

    http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

  15. #35
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par boo64 Voir le message
    j'arrive un peu après la bataille mais tout ce que tu veux faire si j'ai compris c'est mettre en base un csv ou chaque champ correspond à un champ en base ..

    alors pourquoi reinventer la poudre .. une commande mysql existe déjà:

    http://dev.mysql.com/doc/refman/5.0/fr/load-data.html
    attention ca marche uniquement si on a les droits sur FILES

  16. #36
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Points : 1 460
    Points
    1 460
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    attention ca marche uniquement si on a les droits sur FILES
    à priori c'est le cas ici non?

  17. #37
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par boo64 Voir le message
    à priori c'est le cas ici non?
    il a rien dis pour le moment, ou alors j'ai pas vu

  18. #38
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    De plus, je ne pense pas que ça marche si le fichier n'est pas sur la machine qui fait tourner MySQL.

  19. #39
    Membre éclairé
    Avatar de ArKam
    Inscrit en
    Mars 2007
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2007
    Messages : 528
    Points : 679
    Points
    679
    Par défaut
    Citation Envoyé par boo64 Voir le message
    j'arrive un peu après la bataille mais tout ce que tu veux faire si j'ai compris c'est mettre en base un csv ou chaque champ correspond à un champ en base ..

    alors pourquoi reinventer la poudre .. une commande mysql existe déjà:

    http://dev.mysql.com/doc/refman/5.0/fr/load-data.html
    Salut Merci de ton intervention, toute aide est bienvenue, malheureusement, non, ce n'est pas ce que je souhaite faire.

    J'ai déjà trouver toutes les réponses à mes questions grâce à benjamin et Stealth.

    Je vais mettre le sujet en résolu, comme ça ça évitera aux personnes qui passent de perdre du temps à trouver une solution que l'ont a déjà.

    Je ferais juste un ajout de tout le code, quand j'aurais stabilisé le script

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/09/2007, 16h14
  2. parsing de fichier texte
    Par robert_trudel dans le forum Access
    Réponses: 4
    Dernier message: 03/06/2006, 17h45
  3. [DOM] [DocumentBuilder] Problème de parsing de fichier
    Par tck-lt dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 13/04/2006, 17h18
  4. Parsing de fichier en C++ : Au secours :(
    Par Triqueur dans le forum C++
    Réponses: 4
    Dernier message: 16/02/2006, 14h49
  5. Réponses: 5
    Dernier message: 10/09/2005, 18h07

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