Recherche d'un champ a identifier en Perl

Fermé
oliviernouhi Messages postés 82 Date d'inscription vendredi 12 septembre 2008 Statut Membre Dernière intervention 29 novembre 2010 - 25 nov. 2010 à 12:20
oliviernouhi Messages postés 82 Date d'inscription vendredi 12 septembre 2008 Statut Membre Dernière intervention 29 novembre 2010 - 29 nov. 2010 à 11:27
Bonjour,

Je suis entrain de faire un petit parser.

Mais j'ai des options que je n'arrive pas faire.

Je voudrais que mon programme me dise si ma fonction est utilisé.
Donc en gros si je rencontre "nomFonction (" ou "nomFonction("

Je suis un peu perdu et je n'y arrive pas.

Voici mon fichier en entrée :
Form Window: frmOUTACC01

	Dialog Box: dlgNotes
		Function: ForceFocusLigne
						Actions
							ForceFocusLigne(par1, par2)
		Function: ListenFocus
						Actions
							Set mlTxt = Notestbl.colTxt
							
Form Window: frmWACFF03

	Dialog Box: dlgVarin
		Function: DemarrNum
						Actions
							Set nRowNum = SalTblSetRow ( Testb2, Testb2.nPosRow ) 
		Function: ActionScript
						Actions
							ActionScript (par1, par2)


Le resultat devrait être :


La form frmOUTACC01 contient les fonctions :ForceFocusLigne, ListenFocus .Fonctions non utilisées : ListenFocus
La form frmWACFF03 contient les fonctions :DemarrNum, ActionScript .Fonctions non utilisées : DemarrNum



Voici mon de code :


# !usr/bin/perl -w
use strict;
use warnings;
 
my $cpt = 0;
 
print "Debut du traitement\n";
 
open FICHIER, '<', "X7all2.apt" or die("E/S : $!\n");
open ECRIRE,  '>', "parser.txt"    or die("Erreur de création de parser.txt");
 
#tant qu'il y a des lignes dans mon fichier
my %MesDonnes;
# variable de type table de hachage
my $fenetre;
while ( my $ligne = <FICHIER> ) {
  $cpt++;
  chomp $ligne;
  # suppression des blanc en fin de ligne
 
  # Si la ligne contient "Function" OU si la ligne est vide
if ( $ligne =~ m/Form Window:\s*(.+)/i ) {
    $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.
	if ( $ligne !=~ m/\s+Fuction( \s*(.+)/i ) || ( $ligne !=~ m/\s+Fuction ( \s*(.+)/i ){
		$no_use_fonction =~ $1;
	push( @{ $MesDonnes{$fenetre} }, $1 );
	# push prend en argument un tableau et une liste de valeurs scalaires
  }
}

print "Le Parseur a parcourus $cpt lignes\n";
# Parcour du hash pour afficher son contenu
foreach my $fenetre ( sort keys %MesDonnes ) {
  # Calcul du nombre de valeur dans le tableau anonyme associé à la fenetre
  my $nombre_fonction = scalar @{ $MesDonnes{$fenetre} };
  if ( $nombre_fonction != 0 ) {
    print ECRIRE "La form $fenetre contient les fonctions :", join( ', ', @{ $MesDonnes{$fenetre} } ), "\n";
  }
}
#fermeture des fichiers
close FICHIER;
close ECRIRE;
print "Fin du traitement";






Merci d'avance pour votre aide



1 réponse

oliviernouhi Messages postés 82 Date d'inscription vendredi 12 septembre 2008 Statut Membre Dernière intervention 29 novembre 2010
29 nov. 2010 à 11:27
c'est bon j'ai reussis !
0