lire le contenu du fichier d une liste - Perl - Programmation
Marsh Posté le 28-09-2007 à 10:50:40
Ben ta ligne open() t'a fourni un descripteur de fichier "ENTREE" qu'il te faut ensuite utiliser...
http://perldoc.perl.org/functions/open.html
Marsh Posté le 28-09-2007 à 11:00:47
j ai fais ça et ça n a pas marché/
foreach $fic (@liste_a_traiter){
open (ENTREE, "$fic" );
print "$fic\n";
while(<ENTREE> ){
# if ((/^(\$.ATA.*\.\w*\.\w*)/)){
# print $_;
}
}
Marsh Posté le 28-09-2007 à 11:02:05
Mince
Marsh Posté le 28-09-2007 à 11:07:14
Qu'est ce qui "ne marche pas"?
rajoute un or die sur le open histoire de voir si tu n'as pas un probleme de lecture du fichier:
Code :
|
edit: es-tu sur que le probleme ne vient pas de la regex qui ne matcherait jamais?
Marsh Posté le 28-09-2007 à 11:10:38
Tout le contenu de la boucle est commenté, donc effectivement, ça ne fait pas grand chose.
Marsh Posté le 28-09-2007 à 11:14:52
j ai eu ce message :can't open RFPSTATC_2007-09-17.TXT: No such file or directory at D:\metrologie\o
per\tmp\fichiers_a_traiter.pl line 39, <Logfile> line 193.
Marsh Posté le 28-09-2007 à 11:20:51
lotffa a écrit : j ai eu ce message :can't open RFPSTATC_2007-09-17.TXT: No such file or directory at D:\metrologie\o |
Tu n'as pas vaguement l'impression d'essayer de lire un fichier qui n'est pas à l'endroit que tu lui indiques?
A l'instinct je dirais que ta liste ne contient que les noms de fichiers et qu'il manque le chemin vers ceux-ci.
Marsh Posté le 28-09-2007 à 11:23:04
ReplyMarsh Posté le 28-09-2007 à 11:25:24
lotffa a écrit : can't open RFPSTATC_2007-09-17.TXT: No such file or directory at D:\metrologie\o |
lotffa a écrit : si il les affiches si qu il connait le chemin . |
cherchez l'erreur
Il te dit que le fichier existe pas, c'est que le fichier existe pas !!!
Ce qu'il "affiche" c'est le nom du fichier ( qui doit vraisemblablement exister quelque part), mais si celui-ci n'est pas dans le même répertoire que ton script perl, ça ne peut pas marcher.
Peux tu montrer comment tu alimentes ton array @liste_a_traiter.
Marsh Posté le 28-09-2007 à 11:26:54
voila tous le programme:
#!/usr/bin/perl
do '..\\cf\\metro.cfg';
$volume="D:";
$logfile= "$OPER_LOG\\Logfile_traite_fupinfo.txt";
open((Logfile, "$logfile" ));
while($fichier = <Logfile> ){
if ($fichier=~ /(\w+\_\d{4}\-\d{2}\-\d{2}\.TXT)\sOK/){
$fichier_traites=$1;
#print $fichier_traites."\n";
$fichier_ok=uc($fichier_traites);
push (@loglist,$fichier_ok);
#print " ------>$fichier_ok\n";
}
}
#print "@loglist\n";
my @fichiers_arriv=`dir /b $volume\\metrologie\\STATS_PROD\\r??stat?_????-??-??.txt`;
#print "@fichiers_arriv\n";
if (@fichiers_arriv){
for(@fichiers_arriv){
chop($_);
$fichier_traite=uc($_);
@fich_arriv=uc($_);
#print "@fich_arriv\n";
foreach(@loglist){
if(/($fichier_traite)/){
#print "$_\n";
@fichier_trouves= $_;
#print "fichiers trouves---->@fichier_trouves\n";
$recupere=1;
#print @loglist;
}
}
my %h;
map { $h{$_} = 1 } @fichier_trouves;
my @liste_a_traiter = grep { !$h{$_} } @fich_arriv;
foreach $fic (@liste_a_traiter){
open (ENTREE, "$fic" ) || die "can't open $fic: $!";
print "$fic\n";
while(<ENTREE> ){
# if ((/^(\$.ATA.*\.\w*\.\w*)/)){
# print $_;
# $nom_objet = $1;
# $paragraphe_table = "debut";
print 'ok';
#
# }
}
}
}
}
Marsh Posté le 28-09-2007 à 11:28:21
Bon c'est illisible tel quel, j'espère que tu t'en rends compte.
Il y a des balises pour pouvoir mettre du code :
Code :
|
edit : a y est, je l'ai parcouru. En diagonale. Anapajari, je te passe le relai, moi je vais juste lire
Marsh Posté le 28-09-2007 à 11:30:53
bien ce que je disais
Ta liste est remplie à partir du résultat de
Code :
|
Tes fichiers sont donc dans le repertoire
$volume\\metrologie\\STATS_PROD\\ |
Quand tu fais le open, il faut le préciser:
Code :
|
edit: si j'ai le courage je parlerai du reste du code qui est une infamie
Marsh Posté le 28-09-2007 à 11:38:29
anapajari a écrit : edit: si j'ai le courage je parlerai du reste du code qui est une infamie |
Je ne sais même pas par où commencer.
Lotffa > je te suggère de potasser le site http://perldoc.perl.org qui contient toute la documentation du langage. Il est très bien fait, clair et plutôt simple.
Il te manque manifestement beaucoup de notions (ceci dit sans moquerie ni second degré).
Marsh Posté le 28-09-2007 à 11:43:21
le probleme est que ce site est en anglais pas en francais, je comprend pas beaucoup l anglais
Marsh Posté le 28-09-2007 à 11:50:35
Tiens, je l'ai refait un peu plus proprement, je suis pas sur d'avoir bien conservé la logique "métier" de ton script mais comme il est presque incompréhensible c'est pas facile:
Code :
|
lotffa a écrit : le probleme est que ce site est en anglais pas en francais, je comprend pas beaucoup l anglais |
sans méchanceté, abandonne la programmation si tu n'arrives pas à lire une doc en anglais...
Marsh Posté le 28-09-2007 à 10:41:59
Bonjour , je voulais ouvrir une liste qui contient des fichiers
foreach $fic (@liste_a_traiter){
open (ENTREE, "$fic" );
que je fais print $fic il me donne le nom des fichiers que la liste_a_ traiter contient.
mais ce que je recherche c est de lire le contenu de chaque fichier de cette liste .
est ce que vous pouvais m aider svp?
merci