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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| # !usr/bin/perl -w
use strict;
use warnings;
require 'fonctions.pl' ;
my $cpt=0; # compteur de ligne
my $nIndentActuel=0; # indentation actuelle de tabulations
my $y=0; # compteur pour parcours du tableau pour écrire
my $j=0; # compteur pour parcours du tableau pour écrire
my @tab_Description =([0]); # Tableau des Description
my $tab_Description_ligne = 0; # Compteur des Description
my $nIndentReturn= 0; # identation du motif Return
my $bBlockReturn = 0; # vrai (1) ou faux (0) pour savoir si on est dans les Returns
my @bloc =();
#######################################################################################################
# Début du traitement et ouverture fichiers #
#######################################################################################################
print "\n-------------------------------------------------------\n";
print "|--------------- Debut du traitement ---------------|\n";
print "-------------------------------------------------------\n";
open FICHIER, '<', "X7_sans_com2.apt" or die("E/S : $!\n");
open ECRIRE_Description, '>', "parserDesc.txt" or die("Erreur de création de parserDesc.txt");
$tab_Description[0][0]="Ligne";
$tab_Description[0][1]="Description";
$tab_Description[0][2]="Returns";
while ( my $ligne = <FICHIER>) {
$cpt++;
$nIndentActuel = CompteEspaces($ligne); # on stocker dans IndentActuel le nombre de tabulation sur la ligne en question
#######################################################################################################
# Description #
#######################################################################################################
if ( ( $ligne =~ m/\t{3}Data Field Class:\s*(.+)/ ) ||
( $ligne =~ m/\t{3}Frame Class:\s*(.+)/ )||
( $ligne =~ m/\t{3}Child Table Class:\s*(.+)/ )||
( $ligne =~ m/\t{3}Multiline Field Class:\s*(.+)/ )) {
$tab_Description_ligne++; # compteur du nombre de Objet Class
$tab_Description[$tab_Description_ligne][0]=$cpt;
$tab_Description[$tab_Description_ligne][1]= "NULL";
$tab_Description[$tab_Description_ligne][2]= "NULL";
}
my $in_bloc = ($ligne =~ m/^\t*Description:\s*(.+)/) .. ($ligne =~ m{Returns}i); # cherche la présence d'un bloc
push @{$tab_Description[-1]}, $ligne if $in_bloc; # Si l'on est dans un bloc, on remplit la table avec le nouvelle ligne
# Si l'on a trouvé le tag de fin, on traite le bloc
# traitement du bloc
if ($in_bloc =~ /E0/) {
pop @{$tab_Description[-1]}; # Supprimer la dernière ligne du dernier bloc
$tab_Description[-1]->[0] =~ s/Description:\s*//; # Modifier la première ligne du dernier bloc
print @{$tab_Description[-1]};
$tab_Description[$tab_Description_ligne][1] = @{$tab_Description[-1]};
push @tab_Description, []; # Passer au bloc suivant
}
#######################################################################################################
# Returns #
#######################################################################################################
if ($bBlockReturn == 1){ # vrai
if ($nIndentActuel <= $nIndentReturn){
$bBlockReturn = 0; #faux
}
else{
unless ( $ligne =~ m/^\t*Returns\s*(.+)/){
$ligne =~ s/\s+//g;
# chomp($ligne);
if ( $tab_Description[$tab_Description_ligne][2] eq "NULL"){
$tab_Description[$tab_Description_ligne][2] = $ligne;
}
else{
$tab_Description[$tab_Description_ligne][2] = join "-", $tab_Description[$tab_Description_ligne][2], $ligne;
}
}
}
}
# Propriétés Return
if ( $ligne =~ m/^\t*Returns/){
$bBlockReturn = 1;
$nIndentReturn = CompteEspaces($ligne);
}
#######################################################################################################
# End Of File, verifie que toutes les lignes du fichier sont traités #
#######################################################################################################
if (eof) {
print "-------------------------------------------------------\n";
print "|--------------- Fin du fichier courant --------------|\n";
print "-------------------------------------------------------\n";
}
}
#######################################################################################################
# Ecriture du Tableau #
#######################################################################################################
for ($y=0; $y<=$tab_Description_ligne; $y++){
for ($j=0; $j<=2; $j++){
print ECRIRE_Description $tab_Description[$y][$j], "\ ";
}
print ECRIRE_Description "\n";
}
#######################################################################################################
# Compteur #
#######################################################################################################
print "-------------------------------------------------------\n";
print "| parser_external_functions.pl a parcouru ", $cpt, " lignes |\n";
print "-------------------------------------------------------\n";
#######################################################################################################
# Fin du traitement et Fermeture Fichiers #
#######################################################################################################
print "-------------------------------------------------------\n";
print "|---------------- Fin du traitement ----------------|\n";
print "-------------------------------------------------------\n";
close FICHIER; |
Partager