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
| #!/usr/bin/perl -w
use strict;
use warnings;
my ($maindir) = shift; # le repertoire client
my ( %project, @dirs, %dsc_label, %dsc_code, @ldat, @dscdir, %datdir );
print "________________________________________ ReadMainDir($maindir)\n";
&ReadMainDir($maindir);
print "________________________________________ ReadClientDir\n";
&ReadClientDir;
print "________________________________________ CheckProjectDir\n";
$check = 1;
&CheckProjectDir;
print __FILE__. "successfull\n";
exit 0;
#==========================================================
# Objectif : Teste sur le repertoire passe en parametre #
# Resultat : @dirs contient tous les clients #
#==========================================================
sub ReadMainDir() {
print "maindir=$maindir\n";
opendir( FHdir, $maindir )
|| &MyError( __LINE__, $!, "Can not open directory $maindir" );
@dirs =
grep( !/^\./, sort( readdir FHdir ) )
; # to exclude all .file especially directories . and ..
closedir(FHdir);
}
#==================================================================================
# Objectif : Parcourir le repertoire maindir stocke dans @dirs #
# Resultat : une table %project contenant tous les clients et leurs etudes #
#==================================================================================
sub ReadClientDir()
{
#_: s_client :Indexe du repertoire des clients
#_: s_path :Client courant
#_: s_project :Indexe les projets du client courant
#_: s_lproject :Liste des projets du client courant
my ( $s_client, $s_path, @s_lproject, $s_project );
for $s_client (@dirs) {
$s_path = "$maindir/$s_client"; # Chemin client courant
opendir( FHdir, $s_path )
|| &MyError( __LINE__, $!, "Can not open directory $s_path" );
@s_lproject =
grep( !/^\./, sort( readdir FHdir ) )
; # to exclude all .file especially directories . and ..
closedir(FHdir);
foreach $s_project (@s_lproject) {
$s_path = "$maindir/$s_client/$s_project"; # Chemin project courant
next if !-d $s_path;
push @{ $project{$s_client} }, $s_project;
}
}
}
#=========================================================================
# Objectif : construire un repertoire des .dat et un repertoire des dsc
# Resultat : une table contenant tous les @dsc de tous les dsc
# de toutes les etudes de tous les clients et une table
# contenant les listes des .dat de toutes etudes des clents
#=========================================================================
sub CheckProjectDir() {
#_: s_client : Indexe les clefs (client) de la table %project
#_: s_project : Indexe les valeurs (etudes) de la table %project
#_: s_dir : stocke le project courant
#_: s_dsc : stocke le dsc du projet courant
my ( $s_client, $s_project, $s_dir, $s_dsc );
for $s_client ( keys(%project) ) {
if ($check) { print "Client : $s_client\n"; }
#for $s_project (values (%project))
for $s_project ( @{ $project{$s_client} } ) {
if ($check) { print "\tEtude : $s_project\n"; }
$s_dir = "$maindir/$s_client/$s_project "; #project courant
next if !-d $s_dir;
if ($check) {
print "\t\tChemin : $s_dir\n";
} # probleme d'affichage du chemin
opendir( FHdir, $s_dir );
if ( $? != 0 ) {
&MyWarning( __LINE__, $!, "Can not open directory $s_dir " );
next;
}
@ldat =
glob('*.dat '); # la liste des fichiers .dat du project courant
$s_dsc = glob('.dsc'); # dsc du project courant
# $s_dsc=$s_project.".dsc";
closedir(FHdir);
}
#push @{$datdir{$s_project}}, @ldat ; # %datdir a pour clef s_project et pour valeurs @ldat
push @dscdir, $s_dsc;
}
return ( values(%datdir) ); # Retourner la liste des .dat d'un project
return (values (%dscdir)); # Stocke les dsc des etudes de tous les clients
} |
Partager