Bonjour,
j'ai un problème avec mon script, je cherche à ouvrir un répertoire puis à lister les fichiers de ce répertoire. Ensuite j'ouvre chaque fichier en lecture et je recherche une regex dont je stocke en mémoire le résultat.
Puis je tente de renommer les différents fichiers par le résultat de cette regex mais j'ai le message d'erreur suivant : Permission denied at renamer.pl line 49.
Je vois pas où est le pb ? configuration de Windows XP ( je suis admin) ? fonction rename foireuse ? Fermeture pématurée des fichiers à renommer ?
A mon avis c'est moi qui déconne mais où ???
voici mon code :
Merci pour vos remarques et vos conseils sur la réalisation de ce script car je débute en Perl.
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 #!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); $repertoire = "./BREVET"; # On ouvre le repertoir $repertoire opendir(DIR, $repertoire) || die "$repertoire: $!"; my @fichiers = readdir(DIR); # On liste les fichiers du repertoire et on stocke les noms complets dans @BREVET foreach $fichiers (@fichiers){ print "Fichier présent : $fichiers\n"; $old_name= $repertoire."/".$fichiers; print "Path : $old_name\n"; push (@BREVET, "$old_name\n"); closedir(DIR); } # On boucle sur l'ensemble des fichiers contenus dans @BREVET foreach $BREVET (@BREVET) { # Si le nom du fichier correspond à la REGEX on ouvre le fichier if ($BREVET =~ /(.+).htm/g) { open(BREVET, "$BREVET") || die "Cannot open $BREVET for write :$!"; print "Ouverture fichier : $BREVET\n"; # on lit le contenu du fichier while(<BREVET>) { # Si une ligne du fichier correspond à la REGEX on stocke la chaîne mémorisée # dans @NEW et le nom du fichier courant dans @OLD if ($_=~ m/<b>Patent number<\/b>: ([A-Z]+[0-9]+[A-Z]?)<br>/) { print "Ancien path : $BREVET\n"; $new_name=$repertoire."/".$1.".htm"; print "Nouveau path : $new_name\n"; push (@OLD, "$BREVET\n"); push (@NEW,"$new_name\n"); } } close BREVET or die "Cannot close the file $BREVET\n"; } } # Longueur du tableau @OLD my $longueur = @OLD; print "Longueur de OLD : $longueur\n"; # Pour chaque élément de @OLD on renomme la scalaire $OLD[x] par $NEW[x] foreach $OLD (@OLD) { for (my $x=0; $x<$longueur; $x++) { rename($OLD[$x],$NEW[$x])|| die "impossible to rename the file $BREVET: $!"; } }
Yann
Partager