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 :

Comparaison et recherche avec Expression regulière


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut Comparaison et recherche avec Expression regulière
    Bonjour,

    J'ai un soucis avec un expression régulière, j'arrive à faire ce que je veux mais en dur.

    En gros ce que je compare "Function: ForceFocusLigne" jusqu'à ForceFocusLigne_ avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $in_bloc = ($ligne =~ m(Function: ForceFocusLigne)i) .. ($ligne =~ m(ForceFocusLigne_)i); # cherche la présence d'un bloc
    			push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
    			if ($in_bloc =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le bloc
    				# print @bloc[1..($#bloc-1)]; # Voir ce qu'il y a dans le bloc
    				@bloc = ();
    				print "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre ;
    			}
    Je veux le transformer en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $in_bloc = ($ligne =~ m($MesDonnes{$fenetre}:)i) .. ($ligne =~ m($MesDonnes{$fenetre}+/\)/)i); # cherche la présence d'un bloc
    Afin de pouvoir analyser ce fichier en entrée :

    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
     
     
    Form Window: frmOUTACC01
     
    	Dialog Box: dlgNotes
    		Function: ForceFocusLigne
    						Actions
    							ForceFocusLigne(par1, par2)
    		Function: ListenFocus
    						Actions
    							Set mlTxt = Notestbl.colTxt
     
     
    						List Values
    						Entre Motifs
    						Message Actions
    Form Window: frmWACFF03
     
    	Dialog Box: dlgVarin
    		Function: DemarrNum
    						Actions
    							Set nRowNum = SalTblSetRow ( Testb2, Testb2.nPosRow ) 
    		Function: ActionScript
    						Actions2
    							ActionScript (par1, par2)
    Mais ce code la ne fonctionne pas.

    Quelqu'un peut m'aider ou me guider svp, je veux savoir si il y a un bloc entre nomFonction : et nomFonction ( ou nomFonction(

    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Il faut connaitre le contenue de %MesDonnes et de $fenetre pour t'aider.
    Une mise en garde cependant : des données textuelles prises comme expressions régulières peuvent contenir des caractères spéciaux (. * + { } etc ...), qu'il faut échapper avec la fonction quotemeta.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    En faite dans $fenetre je stocke le nom de mes Form ( mes Windows Form )
    et dans @{ $MesDonnes{$fenetre} } le nom de mes fonctions ( Function).

    Le but de mon programme est des savoir dans quelle fenêtre est utilisé telle ou telle fonction, mon programme le gère bien.

    Mais ici je veux savoir si la fonction est utilisé.

    Donc si je rencontre Function: ForceFocusLigne <un bloc> ForceFocusLigne_ ça veut dire que ma fonction est utilisée.

    Voici mon programme en entier a titre indicatif :

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
     
    # !usr/bin/perl -w
    use strict;
    use warnings;
     
    my $cpt = 0; 
    my %MesDonnes; # variable de type table de hachage
    my $fenetre;
    my @bloc = ();
    my @bloc2 = ();
     
    #######################################################################################################
    #                         Début du traitement et ouverture fichiers                                   #
    ####################################################################################################### 
     
    	print "-------------------------------------------------------\n";
    	print "|---------------  Debut du traitement  ---------------|\n";
    	print "-------------------------------------------------------\n\n";
     
    open FICHIER, '<', "X7all2.apt" or die("E/S : $!\n");
    open ECRIRE, '>', "parser.txt" or die("Erreur de création de parser.txt");
     
    	while ( my $ligne = <FICHIER> ) { #tant qu'il y a des lignes dans mon fichier
     
    #######################################################################################################
    #     Enregistrement des Windows Form dans "$fenetre" / Rajout des Functions dans notre tableau       #
    ####################################################################################################### 
     
    		$cpt++;
    		chomp $ligne; # suppression des blanc en fin de ligne
     
    		if ( $ligne =~ m/Form Window:\s*(.+)/i ) { # Si la ligne contient "Function" OU si la ligne est vide
    			$fenetre = $1; # Le nom de la fenetre servira de clé du hash. En valeur, on stocke une référence de tableau qui sera remplit par la suite
    			$MesDonnes{$fenetre} = [];
    		}
    		if ( $ligne =~ m/\s+Function: \s*(.+)/i and defined $fenetre) { # On rajoute dans le tableau anonyme le nom de la fonction.
    			push( @{ $MesDonnes{$fenetre} }, $1 ); # push prend en argument un tableau et une liste de valeurs scalaires
    		}
     
    #######################################################################################################
    #               Fonction "@{ $MesDonnes{$fenetre} }" utilisé dans une Form "$fenetre" ?               #
    ####################################################################################################### 
     
    		foreach my $fenetre (%MesDonnes) {
    			my $in_bloc = ($ligne =~ m(Function: ForceFocusLigne)i) .. ($ligne =~ m(ForceFocusLigne_)i); # cherche la présence d'un bloc
    			push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
    			if ($in_bloc =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le bloc
    				# print @bloc[1..($#bloc-1)]; # Voir ce qu'il y a dans le bloc
    				@bloc = ();
    				print "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre ;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;
    			}
     
    			my $in_bloc2 = ($ligne =~ m(Function: ActionScript)i) .. ($ligne =~ m(ActionScript _)i); # bloc ?
    			push @bloc2, $ligne if $in_bloc2; # bloc ? on remplit la nouvelle ligne
     
    			if ($in_bloc2 =~ /E0/) { # On trouve le tag de fin, on traite le bloc
    				# print @bloc2[1..($#bloc2-1)]; # Voir ce qu'il y a dans le bloc
    				@bloc2 = ();
    				print "\nLa fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;
    			}
    		}
    	}
     
    #######################################################################################################
    #          Gestion des Funtions "@{ $MesDonnes{$fenetre} }" en fonction des Windows From              #
    ####################################################################################################### 
    		print ECRIRE "\n";	
    		foreach my $fenetre ( sort keys %MesDonnes ) { # Parcour du hash pour afficher son contenu  
    		my $nombre_fonction = scalar @{ $MesDonnes{$fenetre} }; # Calcul du nombre de valeur dans le tableau anonyme associé à la fenetre
    		if ( $nombre_fonction != 0 ) {
    			print ECRIRE "La form $fenetre contient les fonctions :", join( ', ', @{ $MesDonnes{$fenetre} } ), "\n";
    		}
    	}
    	print "\n\nLe Parseur a parcourus $cpt lignes\n";
     
    #######################################################################################################
    #             Gestion d'un bloc entre deux motifs "List Values" et "Message Actions" en dur           #
    ####################################################################################################### 
     
    open FICHIER, '<', "X7all2.apt" or die("E/S : $!\n");
     
     
    	print ECRIRE "\nEntre les 2 Motifs List Values et Message Actions : \n";
    	while ( my $ligne = <FICHIER> ) {
    		my $in_bloc = ($ligne =~ m{List Values}i) .. ($ligne =~ m{Message Actions}i); # cherche la présence d'un bloc
    		push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
    		if ($in_bloc =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le bloc
    			print ECRIRE @bloc[1..($#bloc-1)]; # affiches tout sauf le premier et le dernier pour supprimer List Initialization et Message Actions
    			@bloc = (); # puis vidage du bloc pour repartir sur une nouveau bloc
    		}
    	}
     
    #######################################################################################################
    #                            Fin du traitement et Fermeture Fichiers                                  #
    ####################################################################################################### 
     
    	print "-------------------------------------------------------\n";
    	print "|----------------  Fin du traitement  ----------------|\n";
    	print "-------------------------------------------------------\n";
     
    close FICHIER;
    close ECRIRE;
    Voici la partie qui nous 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    #######################################################################################################
    #               Fonction "@{ $MesDonnes{$fenetre} }" utilisé dans une Form "$fenetre" ?               #
    ####################################################################################################### 
     
    		foreach my $fenetre (%MesDonnes) {
    			my $in_bloc = ($ligne =~ m(Function: ForceFocusLigne)i) .. ($ligne =~ m(ForceFocusLigne_)i); # cherche la présence d'un bloc
    			push @bloc, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
    			if ($in_bloc =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le bloc
    				# print @bloc[1..($#bloc-1)]; # Voir ce qu'il y a dans le bloc
    				@bloc = ();
    				print "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre ;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;
    			}
     
    			my $in_bloc2 = ($ligne =~ m(Function: ActionScript)i) .. ($ligne =~ m(ActionScript _)i); # bloc ?
    			push @bloc2, $ligne if $in_bloc2; # bloc ? on remplit la nouvelle ligne
     
    			if ($in_bloc2 =~ /E0/) { # On trouve le tag de fin, on traite le bloc
    				# print @bloc2[1..($#bloc2-1)]; # Voir ce qu'il y a dans le bloc
    				@bloc2 = ();
    				print "\nLa fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;
    			}
    		}
    	}
    Es ce suffisant pour que tu puisse me guider ou m'aider ?

    En te remerciant par avance

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    j'ai essayé comme ceci mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    my $in_bloc = ($ligne =~ m(Function: @{ $MesDonnes{$fenetre} })i) .. ($ligne =~ m/@{ $MesDonnes{$fenetre} }\(/i); # cherche la présence d'un bloc

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Non, ça ne suffit pas pour répondre, il faut connaitre, pour le cas qui ne fonctionne pas, ce que contient la variable $MesDonnes{$fenetre} contenant la regexp, car comme indiqué précédemment, si elle n'est pas quotemetaé, la regexp ne fonctionnera pas correctement.

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    En dur , dans mon exemple la variable @{ $MesDonnes{$fenetre} } contient pour le premier bloc "ForceFocusLigne" et pour le deuxième bloc ActionScript

    Avec ce code ci :

    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
    foreach my $fenetre (%MesDonnes) {
    			my $in_bloc1 = ($ligne =~ m(Function: ForceFocusLigne)i) .. ($ligne =~ m/ForceFocusLigne\(/i); # cherche la présence d'un @bloc1
    			# my $in_bloc1 = ($ligne =~ m(Function: @{ $MesDonnes{$fenetre} })i) .. ($ligne =~ m/@{ $MesDonnes{$fenetre} }\(/i); # cherche la présence d'un @bloc1
    			push @bloc1, $ligne if $in_bloc1; # Si l'on est dans un @bloc1, on remplit la table avec le nouvelle ligne
    			if ($in_bloc1 =~ /E0/) { # Si l'on a trouvé le tag de fin, on traite le @bloc1
    				# print @bloc1[1..($#bloc1-1)]; print "\n"; # Voir ce qu'il y a dans le @bloc1
    				@bloc1 = ();				
    				# print "\nOn rentre bloc1";
    				print "\nLa fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre ;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;		
    				print "\n"; print @{ $MesDonnes{$fenetre} }; print "\n";				
    			}
    			my $in_bloc2 = ($ligne =~ m(Function: ActionScript)i) .. ($ligne =~ m/ActionScript \(/i); # @bloc2 ?
    			# my $in_bloc2 = ($ligne =~ m(Function: @{ $MesDonnes{$fenetre} })i) .. ($ligne =~ m/@{ $MesDonnes{$fenetre} } \(/i); # @bloc2 ?
    			push @bloc2, $ligne if $in_bloc2; # @bloc2 ? on remplit la nouvelle ligne
     
    			if ($in_bloc2 =~ /E0/) { # On trouve le tag de fin, on traite le @bloc2
    				# print @bloc2[1..($#bloc2-1)]; print "\n"; # Voir ce qu'il y a dans le @bloc2
    				@bloc2 = ();
    				# print "\nOn rentre bloc2";
    				print "\nLa fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre;
    				print ECRIRE "La fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre, "\n" ;
    				print "\n"; print @{ $MesDonnes{$fenetre} }; print "\n";
    			}
    		}
    Les noms des fonctions seront toujours a peu près comme ça :
    nomFontion(abc)
    ou bien
    nonFonction (def)

    Es ce suffisant ?

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Le contenu de cette regexp contient-t-il les parenthèses ??? si oui, il s'agit alors de caractères spéciaux qu'il faut metaquoter.
    As-tu essayé, lors de l'enregistrement dans %MesDonnees, d'utiliser la fonction quotemeta (selon l'exemple ci-dessous) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $MesDonnees{$fenetre} = quotemeta($ma_fonction);

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    Non le contenu se trouve entre parenthèse (ce que je dois récupérer) mais ça ne contient pas de parenthèse par exemple mes @{ $MesDonnes{$fenetre} } sont :

    ControleEtape
    CreerNouvelleCleClient
    CreateOrShowHistoConso
    RechChpLib
    StoreAvantDebranchementSaisie
    AfficherInfosOnglets
    etc...
    etc...
    ...

    syntaxiquement je pense que ma ligne de code n'est pas correcte :

    En dur ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $in_bloc1 = ($ligne =~ m(Function: ForceFocusLigne)i) .. ($ligne =~ m/ForceFocusLigne\(/i);
    Comme ceci ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $in_bloc1 = ($ligne =~ m(Function: @{ $MesDonnes{$fenetre} })i) .. ($ligne =~ m/@{ $MesDonnes{$fenetre} }\(/i);

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Effectivement, la ligne n'est pas regexp-syntaxiquement correcte. Ceci devrait être mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $in_bloc1 = ($ligne =~ m(Function: $MesDonnes{$fenetre})i) .. ($ligne =~ m/$MesDonnes{$fenetre}\(/i);

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    merci pour ta réponse j'ai tenté de l'insérer dans mon code mais ça ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach my $fenetre (%MesDonnes) {
    			my $in_bloc1 = ($ligne =~ m(Function: $MesDonnes{$fenetre})i) .. ($ligne =~ m/$MesDonnes{$fenetre}\(/i);
    			push @bloc1, $ligne if $in_bloc1;
    			if ($in_bloc1 =~ /E0/) { 
    				@bloc1 = ();
    				print "\nLa fonction ", @{ $MesDonnes{$fenetre} }, " est utilise dans ", $fenetre ;			
    			}
    		}
    Mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Use of uninitialized value within %MesDonnes in regexp compilation at parser2.pl line 45, <FICHIER> line 1.
    Can t use an undefined value as an ARRAY reference at parser2.pl line 49, <FICHIER> line 6
    une idée ?

  11. #11
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Nous y voila...
    Il semble donc que $fenetre ne contienne pas une valeur correcte, en tout cas, pas une clé présente dans %MesDonnees.

    Pourrais-tu afficher les valeurs de $fenetre et %MesDonnees (juste avant l'exécution de la regexp), comme demandé depuis un moment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Data::Dumper;
    print "fenetre=$fenetre\n";
    print Data::Dumper->Dump([\%MesDonnees], [qw(*MesDonnees)]);

  12. #12
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    Merci pour ta réponse en fait je ne comprend pas trop ce que c'est le regexp ? l'expression régulière ?

    Quand je met ton code dans le mien j'ai cette erreur :

    Can't modify constant item in scalar assignment at parser3.pl line 68, near "$fenetre;"
    Global symbol "%MesDonnees" requires explicit package name at parser3.pl line 66.
    Global sy
    Execution of parser3.pl aborted due to compilation errors

  13. #13
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Pour la première erreur, je ne vois pas, pour la deuxième, il faut remplacer %MesDonnees par %MesDonnes (tu n'as pas accordé Donnée avec Mes !).

    Sinon, dans ton code, j'ai vu l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $fenetre (%MesDonnes) {
    à corriger ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach my $fenetre (keys %MesDonnes) {

  14. #14
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    Merci j'ai corrigé avec tes conseils et aussi j'ai trouvé une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "fenetre=$fenetre\n";
    remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "fenetre =", $fenetre, "\n";

    Voici ce que j'ai en sorti :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fenetre =frmOUTA4567
    %MesDonnes = (
                   'frmOUTACC01' => [
                                      'ForceFocusLigne',
                                      'ListenFocus'
                                    ],
                   'frmOUTA4567' => [
                                      'ForceFocusLigne',
                                      'ArrivedTrain'
                                    ]
                 );

  15. #15
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Donc l'erreur dans la regexp (l'expression régulière) n'est pas du tout étonnante, puisque $MesDonnes{$fenetre} n'est pas un texte simple à placer dans une regexp, mais un tableau de nom de fonction.

    Je suppose donc que tu veux construire une regexp qui accepte l'un des noms de fonction. Si oui, voici comment faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $fonction_re = join "|", @{$MesDonnes{$fenetre}};
    my $in_bloc1 = ($ligne =~ m(Function: (?:$fonction_re))i) .. ($ligne =~ m/(?:$fonction_re)\(/i);
    (je n'ai pas testé ce code ; si tu vois une erreur de syntaxe, cherche un peu, tu devrais pouvoir la corriger )

    Fondamentalement, je ne vois pas d'erreur dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "fenetre=$fenetre\n";

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Points : 110
    Points
    110
    Par défaut
    merci bien

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

Discussions similaires

  1. Java avec expression regulière
    Par bennkabazz dans le forum Général Java
    Réponses: 2
    Dernier message: 11/03/2009, 10h38
  2. Verification de textBox avec expression regulière
    Par GrosBibi dans le forum Windows Forms
    Réponses: 7
    Dernier message: 29/05/2008, 14h57
  3. getMethods avec expression regulière
    Par al3alwa dans le forum Langage
    Réponses: 3
    Dernier message: 03/01/2008, 17h19
  4. [RegEx] problème avec expression regulière
    Par teen6517 dans le forum Langage
    Réponses: 5
    Dernier message: 23/03/2007, 11h39
  5. pb avec expression regulière
    Par siham_06 dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2006, 13h27

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