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; |
Partager