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 :

Problème récupération texte dans des balises HTML


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut Problème récupération texte dans des balises HTML
    Bonjour à tous,

    Petit problème dans un parser pour récupérer du texte dans des balises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <td align="left" nowrap="nowrap" valign="top"><pre>CTCTCAGCATATGTGGGGCGCCTCAG<font color="red">[C/T]</font>GCCCGGCCCAAGCTCAAGGCCTTCC
    </pre></td>
    Je voudrais récuperer les 3 textes :
    CTCTCAGCATATGTGGGGCGCCTCAG
    [C/T]
    GCCCGGCCCAAGCTCAAGGCCTTCC


    Je voudrais que ces 3 bouts de phrases soit dans la meme variable et s'écrivent en une seule ligne : CTCTCAGCATATGTGGGGCGCCTCAG[C/T]GCCCGGCCCAAGCTCAAGGCCTTCC


    Voici un bout de code :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    my $parser_dbSNP_Id = HTML::Parser->new(start_h => [\&start_rtn_dbSNP_Id,"tag, attr"],
    		       					text_h => [\&text_rtn_dbSNP_Id, "text"],
    		        				end_h => [\&end_rtn_dbSNP_Id, "tag"]
    		       					);
     
    			sub start_rtn_dbSNP_Id {
    				my ($tag, $attr) = @_;
     
    				if ($tag =~ /^td$/ 
    					and defined $attr->{align}
    					and $attr->{align} =~ /^left$/
    					and defined $attr->{nowrap}
    					and $attr->{nowrap} =~ /^nowrap$/){
    						$flag = 1;
     
    			}					
     
    			} #End start_rtn_dbSNP_Id
     
    			sub text_rtn_dbSNP_Id {
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if($flag == 1){  
    					$text =~ s/
    //;    
    					print data_out "VARIANTS : $text\n";         
    				}
    			} #End text_rtn_dbSNP_Id
     
    			sub end_rtn_dbSNP_Id {
    				my ($tag) = @_;
     
    				if ($tag =~ /^\/td$/){
    		      			$flag = 0;
    				}
     
    			} #End end_rtn_dbSNP_Id
     
    			#start of parsing in dbSNP
    			$parser_dbSNP_Id->parse($page_dbSNP_Id);
     
    			#end of parsing (dbSNP)
    			$parser_dbSNP_Id->eof;
    Et dans ma console cela s'affiche comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VARIANTS : CTCTCAGCATATGTGGGGCGCCTCAG
    VARIANTS : [C/T]
    VARIANTS : GCCCGGCCCAAGCTCAAGGCCTTCC
    Merci d'avance pour vos commentaires

  2. #2
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    essaie de faire une concaténation afin de créer ta variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			sub text_rtn_dbSNP_Id {
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if($flag == 1){  
    					$text =~ s///;    
    					$variable .= $text;         
    				}
    -- Jasmine --

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Merci pour ton commentaire, malheureusement rien n'a changé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub text_rtn_dbSNP_Id {
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if($flag == 1){  
    					$text =~ s///;    
    					my $variable .=  $text; 
    					print data_out "VaRiAnTs : $variable\n";
     
    				}
    			} #End text_rtn_dbSNP_Id
    Et dans ma console s'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG
    VaRiAnTs : [C/T]
    VaRiAnTs : GCACACAACCATGTCCAGCTTATTT
    Merci d'avance pour d'autres commentaires

  4. #4
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Evidemment qu'ainsi rien ne va changer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sub text_rtn_dbSNP_Id {
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if($flag == 1){  
    					$text =~ s///;    
    					$variable .=  $text; 						        
    				}
    			} #End text_rtn_dbSNP_Id

    Tu dois déclarer $variable en dehors de ton sous-programme car sinon à chaque passage dans celui-ci, elle perdra son ancienne valeur. Le but est qu'à chaque passage tu construises petit à petit ta variable.
    -- Jasmine --

  5. #5
    Membre actif Avatar de CKLN00
    Homme Profil pro
    Bioinformaticien Java/Perl
    Inscrit en
    Avril 2008
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Bioinformaticien Java/Perl
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 210
    Points : 263
    Points
    263
    Par défaut
    je en comprend pas l'interet de cette ligne :
    elle sert à quoi ?
    CKL
    N°°b forever
    --
    may the be with you

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Re,

    J'ai crée la variable $variable avant la subroutine de départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	if($flag == 1){  
    					$text =~ s///;    
    					$variable .=  $text; 
    					print data_out "VaRiAnTs : $variable\n";
     
    				}
    Mais dans la console ca donne :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
     
     
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
     
     
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA[C/T]
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA[C/T]GTTGCAGCAGCTCCTAGAACTTGCC
     
     
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA[C/T]GTTGCAGCAGCTCCTAGAACTTGCC
    CCAGGATGGTCTTGATCTCCTGACCT
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA[C/T]GTTGCAGCAGCTCCTAGAACTTGCC
    CCAGGATGGTCTTGATCTCCTGACCT[C/T]
    VaRiAnTs : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT
    GTAGCTGGGACTACAGGCGCACACAA[A/C]CATGTCCAGCTTATTTTTGTATTTT
    GGATTCAATGGGGACACATTTATAAA[C/T]GTTGCAGCAGCTCCTAGAACTTGCC
    CCAGGATGGTCTTGATCTCCTGACCT[C/T]GTGATCCACCTGCCTCAGCCTCCCA
     
     
    ......
    Tout s'accumule au fur et à mesure.. Comment faire pour éviter ca? MERCI

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Salut,

    La phrase $text =~ s///; je devrais la remplacer par
    Mais c'est pas le plus important en faite...

  8. #8
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Mon idée était de faire quelque chose comme cela
    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
    use strict;
     
    my @phrases = ('CTCTCAGCATATGTGGGGCGCCTCAG', '[C/T]', 'GCCCGGCCCAAGCTCAAGGCCTTCC');
    my $text_concat = "";
     
    foreach my $text (@phrases){
        $text_concat = &test($text_concat, $text);
    }
    print "$text_concat\n";
     
    sub test {
        my $text_concat = $_[0];
        my $text = $_[1];
        ...
        $text_concat .=  $text;
        return ($text_concat);
    }

    Tu gardes en mémoire la valeur de $text_concat que tu allonges progressivement lors des passages dans ton sous-programme. Tu dois donc lui envoyer comme arguments, la chaîne précédente ($text_concat) plus le nouveau morceau à lui ajouter ($text). Tu récupères après la nouvelle valeur de $text_concat. Essaie de voir si cela peut-être adapté à ton script.
    -- Jasmine --

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Merci.

    Je vois comment tu procèdes.
    Mais je parse un site, ou il y a beaucoup de ce type de chaîne de caractère a récupérer (elles sont toutes différentes..). Donc @phrases n'est pas unique.

    Elles sont bien toutes entres les mêmes balises que j'avais donné au début. Mais je vais m'aider de ton dernier exemple...

    Je reviendrai sur le forum mettre la solution (si je la trouve !)

    ++

  10. #10
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Pour récupérer tes valeurs à l'aide d'une regexp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use strict;
     
    my $text = '<td align="left" nowrap="nowrap" valign="top"><pre>CTCTCAGCATATGTGGGGCGCCTCAG<font color="red">[C/T]</font>GCCCGGCCCAAGCTCAAGGCCTTCC
    </pre></td>';
     
    if ($text =~ '<td align="left" nowrap="nowrap" valign="top"><pre>([ATCG]+)<font color="red">(\[[ATCG]/[ATCG]\])</font>([ATCG]+)'){
        my $var = $1.$2.$3;
        print "$var  \n\n";
    }
    affiche
    CTCTCAGCATATGTGGGGCGCCTCAG[C/T]GCCCGGCCCAAGCTCAAGGCCTTCC
    Vérifie que tu n'aies pas des nucléotides dégénérés et que ATCG suffisent.
    -- Jasmine --

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup, mais c'est compliqué car les pharses changent tout le temps...
    En faite je voudrais procéder par une autre méthode :

    Je voudrais toujours parser la page, et récupérer ces 3 morceaux de phrase et les mettre dans 3 variables distinctes...

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <tr><td align="left" nowrap="nowrap" valign="top"><pre>AAACTTTCATGTGACTGGAGTCATCT<font color="red">[C/T]</font>GTCCAAACTGCCTGTGAATATATCT
    </pre></td><td align="right" nowrap="nowrap" valign="top"></td></tr>
    Je voudrais mettre le texte : "AAACTTTCATGTGACTGGAGTCATCT" dans une variable x
    Le texte : "[C/T]" dans une variable y
    Et le texte : "GTCCAAACTGCCTGTGAATATATCT" dans une variable z.

    Cependant je me perd dans les balises, et je ne vois pas entre quelles balises les textes sont encadrés. J'ai fait plusieurs tests (toujours avec le meme parser), j'arrive a retirer le premier texte (x) le deuxieme (y) mais quand je veux afficher le troisième (z), le deuxieme texte (y) rentre dans la variable z....DUR DUR !!

    Bout de code (parser)

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #Parser 
    			my $parser_dbSNP_Id = HTML::Parser->new(start_h => [\&start_rtn_dbSNP_Id,"tag, attr"],
    		       					text_h => [\&text_rtn_dbSNP_Id, "text"],
    		        				end_h => [\&end_rtn_dbSNP_Id, "tag"]
    		       					);
     
    			sub start_rtn_dbSNP_Id {
    				my ($tag, $attr) = @_;
     
    				if ($tag =~ /^pre$/){	
    					$flag = 1;
    	   			}
     
    				if ($tag =~ /^font$/ 
    					and defined $attr->{color} 
    					and $attr->{color} =~ /^red$/ ){
    						$flag = 2;
    				}				
     
    				if ($tag =~ /^font$/ 
    					and defined $attr->{color} 
    					and $attr->{color} =~ /^red$/ ){
    					$flag = 3;
    				}
     
    			} #End start_rtn_dbSNP_Id
     
    			sub text_rtn_dbSNP_Id {
     
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
    				my @tab_dbSNP_Id = @_;
    				if($flag == 1){  
     
    					push(@tab_dbSNP_Id, $text);
    					print data_out"Flanking sequence 1: $text\n";	   	        
    				}
     
    				if ($flag == 2){
    					push(@tab_dbSNP_Id, $text);
    					print data_out"allèle: $text\n";
    				}
     
    				if ($flag == 3 ){
    				#	$text =~ s/
    //; 
    					push(@tab_dbSNP_Id, $text);
    					print data_out"Flanking sequence 2: $text\n";
    				}
     
    			} #End text_rtn_dbSNP_Id
     
    			sub end_rtn_dbSNP_Id {
    				my ($tag) = @_;
     
    				if ($tag =~ /^\/pre$/ && $flag == 1){
    		      			$flag = 0;	
    				}
     
    				if ($tag =~ /^\/font$/ && $flag == 2){				
    		      			$flag = 0;							
    				}
     
    				if ($tag =~ /^\/td$/ && $flag == 3){
    					$flag = 0;				
    				}
     
    			} #End end_rtn_dbSNP_Id
     
     
    			#start of parsing in dbSNP
    			$parser_dbSNP_Id->parse($page_dbSNP_Id);
     
    			#end of parsing (dbSNP)
    			$parser_dbSNP_Id->eof;
    MERCI pour les commentaires

  12. #12
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    J'ai du mal à te suivre quand tu dis

    ton post #9
    Elles sont bien toutes entres les mêmes balises que j'avais donné au début.
    Ton post #11
    Merci beaucoup, mais c'est compliqué car les pharses changent tout le temps...
    Donc seules les balises sont constantes ... et le reste qui ne change pas est ce que tu veux récupérer.
    Parce que à ce que j'ai comprisdans ton exemple, tu veux récupérer tout ce qui n'est pas une balise.
    Ou alors est-ce le texte à l'intérieur des balises qui change?
    Explique toi plus clairement si tu veux que l'on puisse t'aider.
    Petit problème dans un parser pour récupérer du texte dans des balises :


    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <td align="left" nowrap="nowrap" valign="top"><pre>CTCTCAGCATATGTGGGGCGCCTCAG<font color="red">[C/T]</font>GCCCGGCCCAAGCTCAAGGCCTTCC
    </pre></td>
    Je voudrais récuperer les 3 textes :
    CTCTCAGCATATGTGGGGCGCCTCAG
    [C/T]
    GCCCGGCCCAAGCTCAAGGCCTTCC


    j'arrive a retirer le premier texte (x) le deuxieme (y) mais quand je veux afficher le troisième (z), le deuxieme texte (y) rentre dans la variable z....DUR DUR !!
    Quel est ton code récupérant $x, $y et $z et concaténant $x et $z ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use strict;
     
    my $text = '<td align="left" nowrap="nowrap" valign="top"><pre>CTCTCAGCATATGTGGGGCGCCTCAG<font color="red">[C/T]</font>GCCCGGCCCAAGCTCAAGGCCTTCC
    </pre></td>';
     
    if ($text =~ '<td align="left" nowrap="nowrap" valign="top"><pre>([ATCG]+)<font color="red">(\[[ATCG]/[ATCG]\])</font>([ATCG]+)'){
        my ($x, $y, $z) = ($1, $2, $3);
    }
    -- Jasmine --

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Avec mon programme, je me dirige dans une base de données. Avec un nom donné en paramètre la page que je vais parser varie (dans la base de données).

    Ex : perl Monprogramme.pl LDLR
    LDLR ==> nom donné en paramètre.

    En lancant je vais me diriger sur ce site : http://www.pharmgkb.org/do/serve?ojb...227&tabType=12

    A partir de la tu verras dans la colonne "dbSNP Id" beaucoup de liens du style
    rs17249106 (lien http://www.pharmgkb.org/redirect.jsp...m%3Drs17249106

    Je dois ensuite me diriger a l'aide mon parser sur TOUS ces liens, et tu te feras diriger sur une page dans laquellle je dois récupérer le texte : GCCTCCCGAGTAGCTGGGACTACAGG[C/T]GCACACAACCATGTCCAGCTTATTT

    C'est pour cela que je te disais que les textes seront tous différents, mais tous ces textes sont entre les "mêmes" balises !!

    Mon problème est toujours le même (cf dernière réponse)
    MERCI

  14. #14
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Coucou,


    J'ai été voir sur ton site, j'ai pris deux entrées au hasard, et la dernière expression régulière que je t'ai donnée fonctionne très bien ... l'as-tu testée au moins?

    Pourrais-tu montrer le code exact que tu utilises et qui pose problème?
    -- Jasmine --

  15. #15
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Je ne vois comment pourrais fonctionner ton code, car quand tu nommes une variable my $text, tu donnes aussi sa valeur : et c'est pour cela que je te disais "Le texte change tout le temps"

    Moi je voudrais récupérer ces 3 bouts de textes dans 3 variables distinctes !

    Merci

  16. #16
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je ne vois comment pourrais fonctionner ton code, car quand tu nommes une variable my $text, tu donnes aussi sa valeur
    Je t'ai juste donné la bonne expression régulière, essaie de l'adapter à ton script. $text doit seulement contenir la ligne dont tu veux récupérer les imformations.


    ... peut-être là dans ton script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    			sub text_rtn_dbSNP_Id {
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if($flag == 1){  
    					$text =~ s/
    //;    
                                             if ($text=~ '<td align="left" nowrap="nowrap" valign="top"><pre>([ATCG]+)<font color="red">(\[[ATCG]/[ATCG]\])</font>([ATCG]+)'){
                                                             my ($x, $y, $z) = ($1, $2, $3);
                                                             print "$x, $y, $z\n";
                                                 }
    					        
    				}
    			} #End text_rtn_dbSNP_Id
    -- Jasmine --

  17. #17
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Salut,

    J'ai testé ton code, il ne fonctionne pas. Je connais largement moins de choses en Perl que toi, mais ca ne peut pas marcher car $text=~ '<td align="left" nowrap="nowrap" valign="top"><pre>([ATCG]+)<font color="red">(\[[ATCG]/[ATCG]\])</font>([ATCG]+)'

    n'existera jamais. Le texte dans un parser correspond au "texte" entre les balises prédéfinies dans les subroutines de départ et de fin...
    Je vais te dire, si on ne trouve pas ca ne serait pas très très grave...

    Je vais essayer de continuer à chercher

    Encore Merci
    ++

  18. #18
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Je ne connais pas du tout le module HTML:arser. Quand je dois récupérer des données sur une page html, j'utilise le module LWP::Simple; et il me suffit de donner l'adresse internet comme argument.

    Tiens voila un exemple, ça pourra peut-être te servir un jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    use strict;
    use warnings;
    use LWP::Simple;
     
    my $html =get("http://www.ncbi.nlm.nih.gov/sites/entrez?db=snp&cmd=search&term=rs17249106")or print "IMPOSSIBLE D OUVRIR LA PAGE\n";
     
    if ($html =~ '<td align="left" nowrap="nowrap" valign="top"><pre>([ATCG]+)<font color="red">(\[[ATCG]/[ATCG]\])</font>([ATCG]+)'){
        my ($x, $y, $z) = ($1, $2, $3);
        print "$x, $y, $z\n";
    }
    -- Jasmine --

  19. #19
    Membre émérite
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Points : 2 673
    Points
    2 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($text =~ '[ATCG]+\[[ATCG]/[ATCG]\][ATCG]+')
    Cela convient-il?

    [ATCG] lettres A, T, C ou G
    + retrouvé une à plusieurs fois
    \[ crochet ouvrant : [
    \] crochet fermant : ]

    C'est très simple les expressions régulières : celle-ci signifie que tu veux récupérer un groupe de lettres ATCG suivi de [ puis d'une lettre A, T, C ou G ensuite du signe / à nouveau une lettre seule puis on referme ] et enfin on termine avec un groupe de lettres A, T, C ou G.

    Le tout est donc de savoir ce que contient exactement ta variable et de faire le test correct.

    Si cela ne va pas non plus, pourrais-tu me donner un code de test avec les arguments que tu passes au programme afin que j'essaie sur mon PC.

    Merci.
    -- Jasmine --

  20. #20
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 99
    Points : 47
    Points
    47
    Par défaut
    Salut,

    Désolé mais ton expression reg ne marche pas.
    C'est encore le problème des BALISES, comme tu l'as dit avant, ca doit surement fonctionner avec LWP:: SIMPLE, mais avec HTML :: Parser on doit délimiter les textes avec balises d'entrées (< >) et balises de fin (</ >)

    Donc je vais laisser tomber...

    La chose que j'ai pu faire, c'est de mettre ces 3 bouts de textes dans une variable, dc ca donne ca :

    Je te redonne les balises :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <pre>GCCTCCCGAGTAGCTGGGACTACAGG<font color="red">[C/T]</font>GCACACAACCATGTCCAGCTTATTT
    </pre>
    CODE
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #Parser 
    			my $parser_dbSNP_Id = HTML::Parser->new(start_h => [\&start_rtn_dbSNP_Id,"tag, attr"],
    		       					text_h => [\&text_rtn_dbSNP_Id, "text"],
    		        				end_h => [\&end_rtn_dbSNP_Id, "tag"]
    		       					);
     
    			sub start_rtn_dbSNP_Id {
    				my ($tag, $attr) = @_;
     
    				if ($tag =~ /^pre$/){
    					$flag = 1;
    				}
     
    			} #End start_rtn_dbSNP_Id
     
    			sub text_rtn_dbSNP_Id {
     
    				my ($text) = @_;
    	   			$text =~ s/\n/ /g;
     
    				if ($flag == 1 ){
    					print "Flanking sequence: $text\n";
     
    			        }
     
    			} #End text_rtn_dbSNP_Id
     
    			sub end_rtn_dbSNP_Id {
    				my ($tag) = @_;
     
     
    				if ($tag =~ /^\/pre$/ ){
    					$flag = 0;
    				}
     
     
    			} #End end_rtn_dbSNP_Id
     
     
    			#start of parsing in dbSNP
    			$parser_dbSNP_Id->parse($page_dbSNP_Id);
     
    			#end of parsing (dbSNP)
    			$parser_dbSNP_Id->eof;
    Et ce me donne la console :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    Flanking sequence: GCCTCCCGAGTAGCTGGGACTACAGG
    Flanking sequence: [C/T]
    Flanking sequence: GCACACAACCATGTCCAGCTTATTT
     
    Flanking sequence: GTAGCTGGGACTACAGGCGCACACAA
    Flanking sequence: [A/C]
    Flanking sequence: CATGTCCAGCTTATTTTTGTATTTT
     
    Flanking sequence: GGATTCAATGGGGACACATTTATAAA
    Flanking sequence: [C/T]
    Flanking sequence: GTTGCAGCAGCTCCTAGAACTTGCC
     
    Flanking sequence: CCAGGATGGTCTTGATCTCCTGACCT
    Flanking sequence: [C/T]
    Flanking sequence: GTGATCCACCTGCCTCAGCCTCCCA
     
    Flanking sequence: TTGATCTCCTGACCTCGTGATCCACC
    Flanking sequence: [C/T]
    Flanking sequence: GCCTCAGCCTCCCAAAGTGCTGGGA
     
    Flanking sequence: GGCCGAATTCTGAAACTGAGTCTTAA
    Flanking sequence: [A/C]
    Flanking sequence: TGCCAAAAATTCTTATCATCAATTT
     
    Flanking sequence: GTGGCTCATGCCTGTAAAGCCAGCAA
    Flanking sequence: [G/T]
    Flanking sequence: TTGAGAGGCATCATGATGCAAGAGG
     
    Flanking sequence: ATTTGAGAGGCATCATGATGCAAGAG
    Flanking sequence: [A/G]
    Flanking sequence: AAGAGGATTGAGTGAAGCTAGGAGT
     
    Flanking sequence: GGAGGATTCCTTGAGCCCAGGGTTGA
    Flanking sequence: [C/T]
    Flanking sequence: GCTGCAGAGAGCTGTGATCACGCCA
     
    Flanking sequence: CCTTTTTGGCAAGAGGCCTCTGGCAA
    Flanking sequence: [C/T]
    Flanking sequence: CCCATGAGTCCCCAAAGAGACTCAA
     
    Flanking sequence: TATTTACGTCCAGACTCCAGGTATCC
    Flanking sequence: [A/G]
    Flanking sequence: TACAATTGATTTTTCAGATGTTTAT
     
    Flanking sequence: TTCAGATGTTTATACTCAGCCAAAGG
    Flanking sequence: [C/T]
    Flanking sequence: GGGATCCCACAAAACAAAAAATATT
     
    Flanking sequence: CAACAAATCAAGTCGCCTGCCCTGGC
    Flanking sequence: [G/T]
    Flanking sequence: ACACTTTCGAAGGACTGGAGTGGGA
     
    Flanking sequence: AATCAGAGCTTCACGGGTTAAAAAGC
    Flanking sequence: [C/T]
    Flanking sequence: GATGTCACATCGGCCGTTCGAAACT
     
    Flanking sequence: GGACTGCAGGTAAGGCTTGCTCCAGG
    Flanking sequence: [A/C]
    Flanking sequence: GCCAGAATAGGTTGAGAGGGAGCCC
     
    Flanking sequence: GGGGGCGCTGAGGGGAGCGCGAGGGT
    Flanking sequence: [C/G]
    Flanking sequence: GGGAGGAGTCTGAGGGATTTAAGGG
     
    Flanking sequence: CTTTGAGACGGAGTCTAGCTCTGTCG
    Flanking sequence: [C/T]
    Flanking sequence: CCAGGATGGAGTGCAGTGGCACGAT
    ENCORE MERCI BEAUCOUP POUR TA PATIENCE, et tous tes conseils bien précieux...

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/04/2008, 18h11
  2. Problème de recherche dans des balises XML
    Par mbhfr06 dans le forum Langage
    Réponses: 2
    Dernier message: 26/08/2007, 11h26
  3. récupération texte dans des champs ajouter au préalable
    Par Dodielapatate dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/08/2007, 14h11
  4. Problème de coordonnées dans des balises
    Par Zebulon777 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 06/02/2007, 07h26
  5. [AJAX] Traitement des balises html
    Par Mysti¢ dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/08/2006, 22h07

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