pour parcourir un SplFileObject un simple foreach suffit
pour parcourir un SplFileObject un simple foreach suffit
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?
mais bon tous ca sert a rien iterator_count est la pour ca...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreache($parsedfile as $line) { $nblineRaw = $parsedfile->key(); }
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.
au temps pour moi
J'ai tester le foreach et ça marche du tonnerre, merci.SplFileObject extends SplFileInfo implements RecursiveIterator , Traversable , Iterator , SeekableIterator
Me manque deux trois trucs et mon script sera niquel
Merci à tout les deux.
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).
@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.
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é.Comment cela ce fait t'il que je ne puisse plus accéder à l'objet après le while dans ce cas?
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.
Un cas d'uage serait il plus parlant ?
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
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); } }
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
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
De plus, je ne pense pas que ça marche si le fichier n'est pas sur la machine qui fait tourner MySQL.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager