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 :

Recherche ligne par ligne + affichage


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut Recherche ligne par ligne + affichage
    Bonjour,

    Suite à mon précédent sujet, j'ai un petit problème.

    Voilà la situation :

    Je dois récupérer des parties spécifiques de mes mails(généralement les mails ont la même structure).

    Je procède donc par une lecture ligne à ligne du mail puis je récupère ce qui m'interesse :

    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
    $result = explode( "\r\n", $contenu);
    
    	$i = 0;
    	$max = count($result);
    
    	//Initialisation
    	$desc = "";
    	
    	while($i < $max) {
    		if($result[$i++] == "DESCRIPTION:"){
    			while ($result[$i] != "SOLUTION:"){
    				$desc = $desc . $result[$i++];
    			}
    		}
    	}
    Ce code marche correctement et je parviens bien à récupérer ce que je souhaite dans la variable $desc.

    Le problème c'est que dans ce $desc, toutes les ligns sont attachées... je n'ai plus de sauts de lignes.

    Ca doit surement se jouer sur la ligne en gras du code, avec la concaténation de desc.

    Merci

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    pourquoi ne pas utiliser grep?

    http://php.net/manual/fr/function.preg-grep.php
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    Euh je ne connais pas cette fonction pour tout te dire

    Elle serait plus pratique dans mon cas?

    Si on admet que mes mails ont généralement la même structure :

    INTRO
    ...
    DESCRIPTION
    ...
    SOLUTION
    ...
    CONCLUSION
    Ceci est contenu dans une variable $contenu.

    Si je veux récupérer ce qui se trouve entre DESCRIPTION et SOLUTION je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_grep("INTRO.CONCLUSION",$contenu);

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    J'ai suivi un peu la suite de ton post précédent

    Pourquoi tu veux les sauts de ligne ?

    Sinon dans la concaténation, tu ajoutes les sauts de lignes !
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    Je souhaite les sauts de lignes car j'affiche après ma variable.

    Mais oui c'est vrai j'ai juste à ajouter un saut de lignes içi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $desc = $desc . $result[$i++] . '<br/>';
    Je pense finalement me contenter de cette solution, ça passe...

    Mais pour le grep, serait-ce plus efficace comme méthode dans ma situation ?

    Sinon autre question :

    Imaginons que la structure de mes mails reste la même, soit :

    INTRO
    ...
    DESCRIPTION
    ...
    SOLUTION
    ...
    CONCLUSION
    Mais que cette fois-ci, dans UN seul mail il y ait plusieurs fois cette structure. Il faudrai dans ce cas que je récupère ce que je souhaite autant de fois qu'il y a la structure précédente. Genre la structure du dessus, elle serai présente 8 fois dans mon mails il me faudrait 8 variables pour chaque partie.

    Je ne suis pas sûr d'être clair, en tout cas je vois pas trop comment procéder, car on suppose qu'on ne connais PAS le nombre de fois où la structure est présente.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Ca à l'air d'être une excellente idée de Jabbounet

    Pour preg_grep, tu peux essayer un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = preg_grep("/^DESCRIPTION(\d)*SOLUTION$/", $contenu);
    normalement $result[0] contiendrait les textes entre DESCRIPTION et SOLUTION, $result[1] un deuxième de ce type etc, etc ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    normalement $result[0] contiendrait les textes entre DESCRIPTION et SOLUTION, $result[1] un deuxième de ce type etc, etc ...
    si c'est le cas ça serait alors beaucoup plus simple que de parser tout ligne par ligne

    en tout cas j'ai pas trop compris comment marchais le patern pour preg_grep, et le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = preg_grep("/^DESCRIPTION(\d)*SOLUTION$/", $contenu);
    ne fonctionne pas, mais je pense que ça doit pas en être bien loin

  8. #8
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $between=substr($contents, strpos($contents, "DESCRIPTION"), strpos($contents, "SOLUTION")
    non testé je n'ai jamais fait de php.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Le problème c que je débute en regexp (j'ai un tuto de 10 pages dont j'ai lu que 2 ),

    Sinon ya qd même une erreur dans mon code:
    C'est plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = preg_grep("/^DESCRIPTION(.)*SOLUTION$/", $contenu);
    mais il faudrait demander à un bon (genre spacefrog, s.n.a.f.u) pour c'est truc là. (Pose la question sur le forum Php/langage/Regex)
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  10. #10
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Fench Voir le message
    Le problème c que je débute en regexp (j'ai un tuto de 10 pages dont j'ai lu que 2 ),

    Sinon ya qd même une erreur dans mon code:
    C'est plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = preg_grep("/^DESCRIPTION(.)*SOLUTION$/", $contenu);
    mais il faudrait demander à un bon (genre spacefrog, s.n.a.f.u) pour c'est truc là. (Pose la question sur le forum Php/langage/Regex)
    dans l'expression régulière je ne mettrais pas le ^ ni le $, potentiellement je mettrais le commutateur m pour un traitement multi-lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $result = preg_grep("/DESCRIPTION(.)*SOLUTION/m", $contenu);
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    Pour l'instant j'ai toujours ce warning :

    Warning: preg_grep() expects parameter 2 to be array, string ...
    Sinon pour moi les regex je nage aussi

  12. #12
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Preg_grep utilise un tableau et $contenu est un string, il faudrait plutôt utiliser preg_match. Par contre j'utiliserais l'option s pour indiquer que . peut être une nouvelle ligne
    Et donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("/DESCRIPTION(.*)SOLUTION/s", $contenu,$result);
    Dans $result[1] tu as ton texte.
    Un petit trim sur $result[1] pour enlever les espaces en trop avant et après le text.

    Et voila
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  13. #13
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par piero53 Voir le message
    Pour l'instant j'ai toujours ce warning :



    Sinon pour moi les regex je nage aussi
    essaye de passer result à la place de contenu (le resultat de explode)
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    Citation Envoyé par francoisIT Voir le message
    Preg_grep utilise un tableau et $contenu est un string, il faudrait plutôt utiliser preg_match. Par contre j'utiliserais l'option s pour indiquer que . peut être une nouvelle ligne
    Et donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("/DESCRIPTION(.*)SOLUTION/s", $contenu,$result);
    Dans $result[1] tu as ton texte.
    Un petit trim sur $result[1] pour enlever les espaces en trop avant et après le text.

    Et voila
    Ton preg_match fonctionne bien

    Il faut que j'enlève le mot DESCRIPTION et SOLUTION au début et à la fin aussi.

    Mais cette solution est donc plus intéressante que parser ligne à ligner et comparer?

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    quand j'affiche en faisant j'ia bien la partie description, mais si j'affiche mon tableau entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	while ($i<count($result)) {
    		echo $result[$i];
    		$i++;
    	}
    J'ai toute la description mais cette dernière se répète ...

    En gros j'aimerai comprenne ce que contient le tableau, comment il se structure.

  16. #16
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Je continue un peu

    A mon avis c $result['1'] qu'il faut prendre car c le résultat de première parenthése capturante (et donc sans DESCRIPTION et SOLUTION).


    De même, de mon côté j'aurais testé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_match_all("/^DESCRIPTION(.*)SOLUTION$/", $contenu, $result);
    en cherchant dans les $result de 1 aussi

    A tester
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  17. #17
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    Ouaip un m'enlève bien le mot DESCRIPTION et SOLUTION.

    Par contre un sur ton preg_match_all me renvoit array seulement.

  18. #18
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui mais non, c que j'ai écrit trop vite, $result['1'] c pas bon

    sur ton preg_match_all me renvoit array seulement
    Après le preg_match_all fait un print_r($result); et tu vera bien ce qu'il faudra tester .... (voir aussi print_r($result[1]))

    A+
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  19. #19
    Membre régulier
    Inscrit en
    Décembre 2008
    Messages
    483
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 483
    Points : 105
    Points
    105
    Par défaut
    humm... mais quel est l'intérêt d'un preg_match_all si le preg_match normal fonctionne ?

    Sinon avec le preg_match j'ai tout ce que je souhaite sans le sauts de lignes, comment je peux les mettre ?

  20. #20
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Non, le preg_match_all répéte la séquence de recherche (je crois que c l'équivalent de /s de François) c'est à dire dans le cas de plusieurs blocs (DESCRIPTION .... SOLUTION).

    Par contre dans les deux cas, tu devrais avoir les sauts de lignes puisque le masque du preg_match est . donc tous les caractères !!!!

    Essayes sinon en ajoutant \r\n dans le masque
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/06/2009, 09h57
  2. Réponses: 11
    Dernier message: 11/05/2009, 20h29
  3. affichage ligne par ligne du fichier ascII
    Par khayate dans le forum VB.NET
    Réponses: 15
    Dernier message: 06/06/2007, 14h14
  4. [ Problème d'affichage de données ligne par ligne ]
    Par Arkoze dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 05/06/2007, 09h45
  5. Probleme affichage avec un GtkTextView (affichage ligne par ligne)
    Par Marmoccelle dans le forum GTK+ avec C & C++
    Réponses: 9
    Dernier message: 22/03/2007, 14h42

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