Bonjour tous le monde,
j'ai codé rapidement un script
perl avec interface
Tk permettant de
recherché les commentaires dans des fichiers sources:
* soit en indiquant directement le fichier source
* soit en indiquant le répertoire contenant un ensemble de fichier source
Le script recherche les commentaires:
*
perl: #
*
PHP: //
*
(X)HTML,PHP, C, C++: /* */
je le met à votre disposition, je suis ouvert a toutes modification
#!/usr/bin/perl
use warnings;
#Utilisation du module Tk pour l'interface logiciel
use Tk;
#utilisation d'UTF8
use utf8;
#Fonction de sélection d'un fichier
sub SelectFile
{
$fichier = ""; #Initialisation de la variable
$fichier = $fen->getOpenFile(); #contient le nom du fichier sélectionner
$filenameOpen = 'Fichier sélectionné : ' . $fichier;
$repertoire = ""; #Si l'on sélectionne un fichier on vide la variable pouvant contenir un repertoire sélectionné
$dirname = 'Répertoire sélectionné : ' . $repertoire; #contient le nom du repertoire sélectionner
}
#Fonction de sélection d'un répertoire
sub SelectDir
{
$repertoire = ""; #Initialisation de la variable
$repertoire = $fen->chooseDirectory();
$dirname = 'Répertoire sélectionné : ' . $repertoire; #contient le nom du repertoire sélectionner
$fichier = ""; #Si l'on sélectionne un repertoire on vide la variable pouvant contenir un fichier sélectionné
$filenameOpen = 'Fichier sélectionné : ' . $fichier;
}
#Fonction permettant de rechercher lescommentaire mulitiligne en C/C++ PHP HTML
sub Commentaire
{
if ($ligne =~ /\/\*.*\n/)
{
$commentaire .= "|\t".$&;
while ($commentaire !~ /.*\*\//)
{
$commentaire .= "|\t".<FIC>;
}
print $commentaire;
}
}
#Fonction permettant de chercher des comentaires dans un fichiers
sub FichierPattern
{
$fichier = shift(@_);
#print $fichier."\n";
open (FIC,"$fichier") || die ("Le fichier n'existe pas\n");
while (<FIC>)
{
$ligne = $_;
$code = 0;
#Commentaire en perl
if ($fichier =~ /.\.pl$/)
{
$code = 1;
if ($ligne =~ /#.+/)
{
#print $&."\n";
$commentaire .= "|\t".$&."\n";
}
}
elsif ($fichier =~ /.\.pm$/)
{
$code = 1;
if ($ligne =~ /#.+/)
{
$commentaire .= "|\t".$&."\n";
}
}
#Commentaire en PHP
elsif ($fichier =~ /.\.php$/)
{
$code = 2;
if ($ligne =~ /\/\//)
{
$commentaire .= "|\t".$&."\n";
}
else
{
&Commentaire();
}
}
#Commentaire en C/C++
elsif ($fichier =~ /.\.c$/)
{
$code = 3;
&Commentaire();
}
elsif ($fichier =~ /.\.h$/)
{
$code = 3;
&Commentaire();
}
#Commentaire en HTM/HTML/XHTML
elsif ($fichier =~ /.\.x?html?$/)
{
$code = 4;
&Commentaire();
}
}
if ($code != 0)
{
open (FICHIER, ">>$nom_fichier_sortie");
$i = 0;
$delimitation = "";
while ($i <70)
{
$delimitation .= "-";
$i++;
}
$delimitation .= "\n";
print FICHIER $delimitation;
#ecrit dans le ficher de sortie le nom du fichier lu
print FICHIER "|\t$fichier\n$delimitation";
if ($code == 1)
{
#print "$commentaire";
print FICHIER "$commentaire";
}
elsif ($code == 2)
{
print FICHIER "$commentaire";
}
elsif ($code == 3)
{
print FICHIER "$commentaire";
}
elsif ($code == 4)
{
print FICHIER "$commentaire";
}
print FICHIER $delimitation."\n\n";
close (FICHIER);
}
}
#fonction permetant la recherche de motif
sub SearchPattern
{
#Si l'on recherche les commentaires dans un fichier
if($fichier ne "")
{
#Si le fichier existe
if (-e $fichier)
{
&FichierPattern($fichier);
}
else
{
$erreur = "le fichier n\'existe pas";
}
}
#Si l'on recherche les commentaires dans un repertoire
elsif ($repertoire ne "")
{
#Si le repertoire existe
if (-e $repertoire)
{
opendir REP, "." or die "impossible d'ouvrir le repertoire";
@fichiers = readdir REP;
closedir REP;
foreach $entree (@fichiers)
{
&FichierPattern($entree);
}
}
else
{
$erreur = "le repertoire n\'existe pas";
}
}
}
#Fonction permettant le choix du fichier d'enregistrement
sub ChooseFile
{
$nom_fichier_sortie = $fen->getSaveFile();
$filenameSave = "Enregistrer sous: ". $nom_fichier_sortie;
&SearchPattern();
}
#Initialisation de notre variable
$filenameOpen = 'Fichier à ouvrir :';
#Création de la fenetre
$fen = MainWindow->new();
$fen->configure(-title=>'Recherche commmentaire', -background=>'blue');
$fen->geometry('+500+200'); #Emplacement de la fenetre largeur,heuteur
$fen->minsize(qw(350 250)); #Taille minimun de la fenetre largeur,longueur
#Création de notre label d'affichage du fichier sélectionné
$fen->Label(
-relief => 'groove',
-textvariable => \$filenameOpen,
-background=> 'cyan',
-foreground=> 'red',
-font => '{Garamond} 10 bold'
)->pack(
-fill => 'both',
-padx => '5',
-pady => '5'
);
#Ajout de notre bouton à la fenêtre
$fen->Button(
-text => 'Sélectionner un fichier', #Texte du bouton
-font => '{Garamond} 10', #Nom et taille de la police utilisée
-command => \&SelectFile #Action qui modifie notre variable
)->pack(
-pady => '5', #Marge externe du bouton
-padx => '5',
-ipady => '5', #Marge interne du bouton
-ipadx => '5'
);
#Initialisation de notre variable
$dirname = 'Répertoire :';
#Création de notre label d'affichage du répertoire sélectionné
$fen->Label(
-relief => 'groove',
-textvariable => \$dirname,
-background=> 'cyan',
-foreground=> 'red',
-font => '{Garamond} 10 bold'
)->pack(
-fill => 'both',
-padx => '5',
-pady => '5'
);
#Ajout de notre bouton à la fenêtre
$fen->Button(
-text => 'Sélectionner un répertoire', #Texte du bouton
-font => '{Garamond} 10', #Nom et taille de la police utilisée
-command => \&SelectDir #Action qui modifie notre variable
)->pack(
-pady => '5', #Marge externe du bouton
-padx => '5',
-ipady => '5', #Marge interne du bouton
-ipadx => '5'
);
#Initialisation de notre variable
$filenameSave = 'Enregistrer sous :';
#Création de notre label d'affichage du fichier sélectionné
$fen->Label(
-relief => 'groove',
-textvariable => \$filenameSave,
-background=> 'cyan',
-foreground=> 'red',
-font => '{Garamond} 10 bold'
)->pack(
-fill => 'both',
-padx => '5',
-pady => '5'
);
#Ajout de notre bouton à la fenêtre
$fen->Button(
-text => 'Saisir un nom de fichier', #Texte du bouton
-font => '{Garamond} 10', #Nom et taille de la police utilisée
-command => \&ChooseFile #Action qui modifie notre variable
)->pack(
-pady => '5', #Marge externe du bouton
-padx => '5',
-ipady => '5', #Marge interne du bouton
-ipadx => '5'
);
MainLoop();