Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  parsage de fichier - boucle sur un repertoire

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

parsage de fichier - boucle sur un repertoire

n°888596
uriel
blood pt.2
Posté le 02-11-2004 à 15:38:03  profilanswer
 

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
mood
Publicité
Posté le 02-11-2004 à 15:38:03  profilanswer
 

n°888597
Profil sup​primé
Posté le 02-11-2004 à 15:38:52  answer
 

[:dawa]

n°888599
uriel
blood pt.2
Posté le 02-11-2004 à 15:39:56  profilanswer
 

et oui, je vais virer les STDOUT apres :D


---------------
IVG en france
n°888600
Mr Mala
Posté le 02-11-2004 à 15:41:06  profilanswer
 

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

n°888601
uriel
blood pt.2
Posté le 02-11-2004 à 15:43:25  profilanswer
 

: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
n°888602
uriel
blood pt.2
Posté le 02-11-2004 à 15:45:46  profilanswer
 

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
n°888609
chrisbk
-
Posté le 02-11-2004 à 15:57:36  profilanswer
 

[:1337]


---------------
NP: HTTP Error 764 Stupid coder found
n°888611
uriel
blood pt.2
Posté le 02-11-2004 à 15:58:55  profilanswer
 

mais je suis serieux [:zytrasnif]


---------------
IVG en france
n°888617
Mr Mala
Posté le 02-11-2004 à 16:05:09  profilanswer
 

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 ?

n°888634
uriel
blood pt.2
Posté le 02-11-2004 à 16:20:42  profilanswer
 

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
mood
Publicité
Posté le 02-11-2004 à 16:20:42  profilanswer
 

n°888786
simogeo
j'ai jamais tué de chats, ...
Posté le 02-11-2004 à 19:41:28  profilanswer
 

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


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°889191
uriel
blood pt.2
Posté le 03-11-2004 à 09:07:15  profilanswer
 

[:god]


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  parsage de fichier - boucle sur un repertoire

 

Sujets relatifs
Comment crée un fichier .exe???????[BATCH] fichier txt et variable
Upload d'un fichier MP3vbscript + fichier INI
écrire dans un fichier excelRécuper le nom d'un fichier
fichier speciauxMot de passe fichier
Je trouve pas à propos d'une boucle while ...[Abandon]BAT : créer un fichier avec comme nom la date du jour
Plus de sujets relatifs à : parsage de fichier - boucle sur un repertoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR