parsage de fichier - boucle sur un repertoire

parsage de fichier - boucle sur un repertoire - Perl - Programmation

Marsh Posté le 02-11-2004 à 15:38:03    

bon, ca fait un moment que je m'etais pas remis au Perl mais quand meme :sweat:
 
j'ai un repertoire qui contient des fichiers dont je veux recuperer quelques infos que je mettrais dans un fichier csv.
au depart, j'avais fait un code pour 1 fichier pris en argument, qui fonctionne nickel. Je rajoute une boucle sur le repertoire et la, ca ne fonctionne plus... ca doit etre tout con, mais j'ai le nez dessus depuis des heures et pas moyen :/
 
voici le code complet (oui, je sais y a des trucs louches, j'optimiserais plus tard)

Code :
  1. #! /usr/bin/perl
  2. print STDOUT "RUNNING EXTRACT GAMESS INFORMATIONS SCRIPT\n";
  3. #create the file which will contains the result
  4. $outname = "result.csv";
  5. open(OUT,">>${outname}" ) or die ('Error creating the file');
  6. #open the current directory and put files in an array
  7. opendir(MY_DIR,"." ) or die "error reading the directory : $!";
  8. @all_files = grep !/^\.\.?\z/, readdir MY_DIR;
  9. closedir MY_DIR;
  10. print STDOUT "File name,Number of cartesian gaussian basis function,Number of occupied orbitals,Finale energy\n";
  11. print (OUT "File name,Number of cartesian gaussian basis function,Number of occupied orbitals,Finale energy\n" );
  12. #parse all the files c'est la que le probleme arrive
  13. foreach $gamessfile (@all_files){
  14. #open the output file of gamess
  15. open(INPUT,"<$gamessfile" );
  16.  $lines = 0;
  17.     while (sysread INPUT, $buffer, 4096) {
  18.  $lines += ($buffer =~ tr/\n//);
  19.     }
  20. close(INPUT);
  21. print STDOUT "\n".$gamessfile.",";
  22. open(INPUT, "<$gamessfile" );
  23. while ($i<=$lines){
  24.  if ($list[3] eq "GAUSSIAN" && $list[5] eq "FUNCTIONS" ){
  25.   print STDOUT $list[7].",";
  26.   print (OUT $list[7]."," );
  27.  }
  28.  if ($list[4] eq "(ALPHA)" ){
  29.   print STDOUT $list[6].",";
  30.   print (OUT $list[6]."," );
  31.  }
  32.  if ($list[0] eq "FINAL" ){
  33.   print STDOUT $list[4].",";
  34.   print (OUT $list[4]."," );
  35.  }
  36.  @list = &readline();
  37.  $i+=1;
  38. }
  39. close(INPUT);
  40. }
  41. close(OUT);
  42. sub readline()
  43. {
  44.  chop($line= <INPUT> );
  45.  $line =~ s/^\s+//;
  46.  @list = split(/\s+/,$line);
  47.  return(@list);
  48. }


 
pourtant il affiche bien tous les noms de fichier (print STDOUT "\n".$gamessfile.","; ) mais il ne recupere pas les donnees dedans :/
 
vous voyez un truc enorme?


Message édité par uriel le 02-11-2004 à 15:40:21

---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 15:38:03   

Reply

Marsh Posté le 02-11-2004 à 15:38:52    

[:dawa]

Reply

Marsh Posté le 02-11-2004 à 15:39:56    

et oui, je vais virer les STDOUT apres :D


---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 15:41:06    

heuuu ton $i, tu l'initialises où ???

Reply

Marsh Posté le 02-11-2004 à 15:43:25    

:sweat: un oubli de copier coller depuis le fichier initial, il etait juste avant la boucle while du parsage...
 
desole :sweat:
 
et merci Mr Mala ;)


---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 15:45:46    

evidemment ca fonctionne...
 
tant que j'y suis, vous voyez comment limiter mon @all_files au fichier avec une extensions .out  
le grep ne semble pas lui convenir (le grep deja en place vire uniquement le . et le .. )  :??:


---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 15:57:36    

[:1337]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 02-11-2004 à 15:58:55    

mais je suis serieux [:zytrasnif]


---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 16:05:09    

uriel a écrit :

evidemment ca fonctionne...
 
tant que j'y suis, vous voyez comment limiter mon @all_files au fichier avec une extensions .out  
le grep ne semble pas lui convenir (le grep deja en place vire uniquement le . et le .. )  :??:


 
Ben si tu fais un match sur l'extension, t'as plus besoin de virer . et .. alors ...  
juste  
 
@all_files = grep /\.out\z/, readdir MY_DIR;  
 
mmh ?

Reply

Marsh Posté le 02-11-2004 à 16:20:42    

oui c'est bien ca
 
merci beaucoup :jap:
 
edit: faut vraiment que je me remette a perl et aux regex :sweat:


Message édité par uriel le 02-11-2004 à 16:21:11

---------------
IVG en france
Reply

Marsh Posté le 02-11-2004 à 16:20:42   

Reply

Marsh Posté le 02-11-2004 à 19:41:28    

bon'anniv' [:extazaille]
 
[:kadreg] [:kadreg] [:kadreg]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 03-11-2004 à 09:07:15    

[:god]


---------------
IVG en france
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed