Bonjour, j'ai une problématique face à un sujet : en effet, mon prof m'a envoyé un parcours d'une arborescence. Je ne vois pas la différence avec l'énonce. Le prof nous demande de nous servir de cette arborescence pour faire le code répondant à l'exercice.
Chercher dans un dossier donné, et ses sous-dossiers, tous les fichiers qui contiennent des lignes commençant par un mot donné et écrire dans un fichier rapport la liste des fichiers répondant au critère.
Le parcours du dossier devra se faire dans une fonction (utilisation de « sub ») distincte du reste du programme.
Le rapport sera présenté de la façon suivante :
Date : Thu Nov 7 10:01:41 2013
Dossier : /chemin/dossier
fichier1
ligne du fichier1 commençant par le mot cherché
ligne suivante du fichier1 commençant par le mot cherché
...
dernière ligne du fichier1 commençant par le mot cherché
fichier2
ligne du fichier2 commençant par le mot cherché
ligne suivante du fichier2 commençant par le mot cherché
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 sub AnalyseDossier { # La fonction analyseDossier attend un seul paramètre qui est le nom du dossier qu'on veut analyser my $D= shift @_; # On recupere le nom du dossier... # ouverture du dossier $D et creation du descripteur REP opendir (REP,$D) or die ("Impossible d'ouvrir le repertoire ",$D); # On recupere les fichiers du descripteur REP dans @listFile # Notez bien que @listFile peut contenir à la fois des dossiers et des fichiers my @listFile = readdir (REP); # on ferme le descripteur close (REP); # Parcours des éléments du dossier $D, ils peuvent $etre des fichiers ou des dossiers foreach (@listFile) { # Création du nom complet : my $nomComplet = $D."/".$_; # S'il s'agit d'un fichier on le traite via la fonction de traitement if (-f $nomComplet) { traitement($nomComplet); } # sinon s'il s'agit d'un dossier autre que les dossiers . et .. elsif (-d $nomComplet and $_ ne "." and $_ ne "..") { # ... on lance un nouvel appel récursif à notre fonction, sur ce dossier là : AnalyseDossier ($nomComplet); } } # fin de foreach (@listFile) } # fin de fonction analyseDossier sub traitement { # Ici on se contente d'afficher le nom du fichier et sa taille # On récupère le paramètre passé à la fonction traitement : my $nomComplet = shift @_; # c'est le nom*complet du fichier my $taille = -s ($nomComplet); print "\n$nomComplet : $taille"; } # fin de fonction traitement ######*PROGRAMME PRINCIPAL ###### print "\nCe programme parcourt toute l'arborescence d'un dossier que vous allez donner"; print "\nIl va afficher tous les fichiers et les sous-dossiers"; print "\nPour chaque fichier, on affichera le nom et la taille"; # saisie print "\n\nQuel dossier ? Entrez le nom complet\n"; $D = <STDIN>; chomp $D; # traitement if (-d $D) { AnalyseDossier ($D); } else { die ("Impossible d'ouvrir le repertoire ",$D); } print "\n\nAu revoir !\n\n";
Partager