parcourir un dossier (je le relance) - Perl - Programmation
Marsh Posté le 05-06-2006 à 14:48:50
Hum j'ai trouver ceci il parais que ce programme compte les fichier et dossier d'un repertoire pour moi il affiche toujours 0 fichiers et 2 répertoire
my $nbrep = 0;
my$nbfic = 0;
my $dossier = "c:\\Documents and Settings\\toto" );
opendir DIR, $dossier or die "$dossier n'existe pas !";
my @files = readdir DIR;
foreach my $fichier (@files) {
if (-f $fichier) { $nbfic++; }
elsif (-d $fichier) { $nbrep++; }
}
close DIR;
print "Il y a $nbfic fichier(s) et $nbrep répertoire(s) dans $dossier.\n";
J'ai aussi trouver la fonction glob:
my @fichiers_pdf = glob("c:\\Documents and Settings\\toto*.pdf" );
foreach my $scalar(@fichiers_pdf) {
print "$scalar\n";
}
Mais la non plus rien de concluant
alors je le dit ... à l'aide
Marsh Posté le 06-06-2006 à 08:51:06
Merci Pospos tu va me trouver un peu chiant pi être ou un peu c.. sur les bords mais j'ai toujours pas compris la fonction glob
Marsh Posté le 06-06-2006 à 09:55:47
la fonction glob emule le glob du shel: il te sort tous les fichiers qui matchent le pattern que tu lui donne (un peu comme une regexp)
genre a*.pdf va matcher a1.pdf, a2.pdf, etc...
Marsh Posté le 06-06-2006 à 10:07:42
Bon c'est bien ce que j'avais compris, merci mais cette fonction ne fonctionne que sous Unix je crois? Non? Et le problème c'est que mon entreprise est sous Windows (y on pas encor compris pourquoi linux c'est bien) et donc dans mes pérégrination j'ai trouver DosGlob que je n'arrive pas du tout à faire marcher sur cpan on trouve ceci:
Code :
|
j'ai remplacer ainsi:
Code :
|
ca me met une erreur dans le fichier DosGlob, et je ne comprend pas pourquoi.
Merci de ton aide
Marsh Posté le 06-06-2006 à 12:39:37
A tester, autre solution :
Code :
|
Marsh Posté le 06-06-2006 à 13:41:04
youpi ca marche merci bocoup c'est trop bien
euhh juste un petit détail comment faire pour lui dire que le répertoire c'est celui ou je suis??
Marsh Posté le 06-06-2006 à 13:53:56
Essaie ceci dans ton script :
Code :
|
Si ton script doit être installé dans le même dossier que tes PDF, tu peux virer le chdir que je fais, tu n'en as pas besoin dans ce cas. Enfin normalement.
Marsh Posté le 06-06-2006 à 15:22:30
File::Glob marche aussi bien sous windows que sous linux, et sert maintenant à implementer le glob du core de perl (le < > )
Marsh Posté le 06-06-2006 à 17:16:33
ouai mais j'arrive pas à le faire tourner c'est hyper bizar j'ai la bonne commande je pense, donc je comprend pas
Marsh Posté le 07-06-2006 à 09:37:19
oui bon c'"est encore moi, en faite je pensais faire la suite finger in the noz mais ...non
voila mon code :
Code :
|
Comme vous pouvez le voir je veux maintenant parcourir les sous-répertoire, j'ai penser àdu récursif au début mais en cherchant j'ai trouver un message disant que le récursif en PERL c'est nul:http://forum.hardware.fr/hardwaref [...] 2740-1.htm
donc je me suis dit utilisont une boucle alors mais le problème c'est que j'ai un problème de répertoire:
imaginons, je trouve un nouveau répertoire, je l'ouvre (opendir) mais ensuite comment je fait pour rappeler mon programme dessus?? le chemin est diffférent
Voila mon drame
Marsh Posté le 07-06-2006 à 10:45:29
ahah j'avance un peu(j'aime bien parler tout seul)
Code :
|
mais la encore ca fait des choses bizar, ca traite pas les PDF du premier dossier normal (les répertoire sont répertorier avant donc le premier fichier traiter est un répertoire)
ca traite les info du second dossier nikel mais ca oublie les répertoire suivant snif.
Marsh Posté le 07-06-2006 à 13:43:35
hum bizar j'avance encor mais autre problème, mon code pmarche bien pour le premier répertoire mais ne veut pas descendre dans les sous répertoire, il ne reconnais pas le type de fichier du sous répertoire (-d ou -f)
Code :
|
Marsh Posté le 07-06-2006 à 13:46:50
Ton label TOTO, je me demande si ça pose pas un problème avec la ligne juste en dessous où tu déclares $dirsav avec my.
A chaque fois que ton programme boucle et revient sur le début de TOTO, il redéclare une variable $dirsav.
M'est avis qu'en compilant ton script avec les options -c -w passées à Perl, il devrait beugler
Marsh Posté le 15-06-2006 à 08:49:55
je crois qu'il y a une petite erreur dans une expression reguliere :
Citation : if ($fichier =~ /^./){} |
ce doit etre if ($fichier =~ /^[.]/){}
sinon tu ne rentres jamais dans le else puisqu'il cherche un fichier qui commence par n'importe quel caractere donc tous!
krao
Marsh Posté le 15-06-2006 à 10:23:24
Merci de votre aide désoler de pas vous répondre mais mon patron me fait plancher sur un truc autre en ce moment j'ai laisser mon code en vrac
Marsh Posté le 05-06-2006 à 14:18:03
Bonjour, c'est encor moi désoler.
Voila je dois parcourir un dossier et rechercher tous les fichier .pdf et les convertir en txt, pour la conversion j'ai trouver pdftotext pour convertir les fichiers ca me semble bien et je voulais savoir si il existait une commande pour trouver tous les fichier pdf??
Merci de votre attention.
Message édité par Lanfeust42 le 07-06-2006 à 09:26:50