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 Perl Discussion :

[langage] Extraire un block dans une variable multiligne


Sujet :

Langage Perl

  1. #1
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut [langage] Extraire un block dans une variable multiligne
    Lut All,

    Voila je cherche à récupérer des infos en parsant des Pages HTML;

    Je lis la page, je la transforme en ASCII en utilisant :
    use HTML::FormatText;
    use HTML::TreeBuilder;

    J'ai donc une variable ASCII multiligne de type :

    bla bla bla blabl bla bla bla bla reblareblaaa
    bla bla bla bla bla MOTIF1 #DATA1
    MOTIF2 #DATA2
    bla bla bla bla

    Je souhaite extraire les donnée #DATA1 et #DATA2

    j'ai essayé avec des regexp mais je n'y arrive pas en faisant un truc du genre :

    $data1 = $ascii;
    $data1 =~ s/(.*)MOTIF1(.*)/$2/m;
    $data2 =~ s/MOTIF2t(.*)//m;



    Help me Please

  2. #2
    En attente de confirmation mail
    Inscrit en
    Mars 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 67
    Points : 75
    Points
    75
    Par défaut
    bla bla bla blabl bla bla bla bla reblareblaaa
    bla bla bla bla bla MOTIF1 #DATA1
    MOTIF2 #DATA2
    bla bla bla bla


    qu'est ce qui différencie #DATA1 ou #DATA2 du bla bla qui le suit?

    Christophe

  3. #3
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    #DATA1 est encadré par motif1 et motif2
    #DATA2 peut être encadré par motif2 et un motif3 ou éventuellement un /n

  4. #4
    En attente de confirmation mail
    Inscrit en
    Mars 2002
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 67
    Points : 75
    Points
    75
    Par défaut
    alors tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $data1 = $ascii;
    $data1 =~ s/^(.*MOTIF1\s)(.*)(\sMOTIF2.*)$/$2/m;
    (j'ai pas fait de vérif)

    et pour data2, tu fais pareil en remplaçant ce qui encadre

    Christophe.

  5. #5
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    En fait cela me donne le meme résultat cela ne m'enlève pas les lignes avant et après dans la variable.

    Si je fait un print $ascii avant traitement j'ai :
    /n
    Réalisateurs : WALT DISNEY DEAN DEBLOIS CHRIS SANDERS/n
    Interprète : DESSIN ANIME/n
    Genre : DESSIN ANIME / VIDEO/n
    Support : DVD/n
    /n
    /n
    commentaire : bla bla bla

    et je souhaite récupérer
    $réalisateur = "WALT DISNEY DEAN DEBLOIS CHRIS SANDERS";
    $genre = "DESSIN ANIME / VIDEO";
    $support = "DVD";

    donc dans l'esprit de ce que tu me disais je pensait

    faire :
    $genre =~ s/^(.*Genre\s)(.*)(\sSupport.*)$/$2/m;

    Mais le .* de début et de fin ne semblent pas être pris en compte

    du coup je me retrouve avec :
    $genre =
    "Réalisateurs : WALT DISNEY DEAN DEBLOIS CHRIS SANDERS
    Interprète : DESSIN ANIME
    : DESSIN ANIME / VIDEO";

    sic !

    Je n'arrive pas en fait à passe outre les retours chariots semble t'il.

  6. #6
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    ALors je viens de trouver une bonne piste en faisant :

    $genre =~ s{.*Genre(.*)Support.*} {$1}gsx;

    Me reste à virer le : et les espaces avants et après. Mais j'ai encore du mal à combiner plusieurs regexp en une seule si qqun peut m'aider.

  7. #7
    Membre éprouvé
    Avatar de jérôme
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 591
    Points : 1 071
    Points
    1 071
    Par défaut
    Et avec une règle comme ça ?
    Ca marche pas ? (Note que je ne fais pas de Perl et donc je ne connais pas bien les regexp en Perl )

  8. #8
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut
    Alors voilà où j'en suis

    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
    17
    18
    19
     
    sub thru_to {
    	my ($from, $thru, $to);
    	$from = $_[0];
    	$thru = $_[1];
    	$to   = $_[2];
     
     
    	$from =~ s{(.*$thru)(.*)($to.*)\s+$} {$2}s;
    	$from =~ s/^\s+//;
    	$from =~ s/\n/ /g;
    	$from =~ s/^:|//gs;
    	$from =~ s/^\s+//;
     
    	return $from;
     
    }
     
    $genre= &thru_to ($ascii, 'Genre', 'Support');
    Le problème est que s'il y a plusieur fois le motif de terminaison (ici Support) la portion de texte sélectionnée est entre genre et la dernière occurence du second motif argh !!!

  9. #9
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Voilà ma solution (en partant du $ascii sans traitement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @lignes = split("\n", $ascii);
     
    foreach $ligne (@lignes) {
        $ligne =~ /(.*) : (.*)/;
        if ($1 eq "Réalisateurs") { $realisateur = $2; }
        if ($1 eq "Interprète") { $interprete = $2; }
        if ($1 eq "Genre") { $genre = $2; }
        if ($1 eq "Support") { $support = $2; }
    }
    vic

  10. #10
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Février 2003
    Messages
    126
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 126
    Points : 127
    Points
    127
    Par défaut [Resolu]
    C'est vrai que j'avais pas pensé dans ce sens là avec tout ça si j'arrive pas à me débroullier.

    Merci.

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

Discussions similaires

  1. Extraire (dans une variable) la valeur d'un COUNT()
    Par EkrazNeophite dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 13/03/2015, 15h29
  2. [MySQL] extraire le choix dans un variable d'une liste déroulante mysql en php
    Par guytibo dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 13/12/2010, 19h17
  3. [RegEx] extraire dans une variable
    Par J4e8a16n dans le forum Langage
    Réponses: 4
    Dernier message: 22/01/2010, 17h29
  4. Extraire socket d'un sub dans une variable
    Par Adharna dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/11/2008, 14h32
  5. [MySQL] Extraire des variables dans une variable
    Par kryogen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/10/2007, 09h20

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