creation de fichier dans les sous repertoires

creation de fichier dans les sous repertoires - Perl - Programmation

Marsh Posté le 11-10-2008 à 17:27:27    

petit probleme, j'explique ce que je cherche à faire:
-parser les sous repertoire de là où je lance mon script perl et trouver les fichier .coin
-pour chaque fichier .coin je crée un fichier .inp qui contient le nom du fichier .coin dedans et autres info
 
ça parait simple et pour le moment ça fonctionne.... sauf que tous les fichiers .inp sont crées dans le repertoire d'où je lance le script, pas dans les repertoires où sont les .coin et ça c'est pas ce que je veux.
 
mon code fait ça:

Code :
  1. sub findCoinFile {
  2.   if ( (/\.coin$/) ){
  3.       push(@coinfile,"$File::Find::name" );
  4.  }
  5. }


 
donc j'ai bien le nom entier avec path et tout, mais au moment de créer mon nouveau fichier .inp je merde sûrement parce que si j'utilise le $coinfile (dans un foreach) avec une substitution pour remplacer l'extension ça ne fonctionne pas, ça me crée juste tous les .inp dans le repertoire courant :/
 

Code :
  1. open (OUT, ">$coinInput" ) || die "Error to create the file \"$coinInput\": $!";


 
des idées?
 


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

Marsh Posté le 11-10-2008 à 17:27:27   

Reply

Marsh Posté le 11-10-2008 à 17:51:48    

Zarb. Et dans $coinInput y a bien un chemin de type foo/bar/file.inp ?

Reply

Marsh Posté le 11-10-2008 à 18:02:33    

oui, à partir du repertoire courant où je lance le script :/


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

Marsh Posté le 11-10-2008 à 18:32:06    

bon, je colle tout, ça vient sans doute de ma substitution d'extension:

 
Code :
  1. foreach (@coinfile) {
  2. my $coin_file_name=$_;
  3.  
  4. print "processing ",$_,"\n";
  5.  
  6. unless ($coin_file_name) {
  7.    print STDERR "Please enter the name of a .coin file.\n";
  8.    print STDERR "Aborting.\n";
  9.    exit 1;
  10. }
  11. #recover file name
  12. @molecule=split(/\//,$coin_file_name);
  13. $name=$molecule[-1];
  14. $nameInput=$_;
  15. $nameInput=~ s/.coin/_cst.inp/;
  16.  
  17. my $coinInput = $nameInput;
  18. open (OUT, $nameInput) || die "Error to create the file \"$nameInput\": $!";


j'ai aussi besoin du nom du fichier seul, d'où le bidouillage avec @molecule, mais quand je lance le script maintenant, j'ai


processing ./etcooh/etcooh_bp86tzvp_dblcav.coin
Error to create the file "./etcooh/etcooh_bp86tzvp_dblcav_cst.inp": No such file or directory at ./writeCOINInput.pl line 31.


la ligne 31 c'est le 'open'
[:transparency]


Message édité par uriel le 11-10-2008 à 18:32:59

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

Marsh Posté le 11-10-2008 à 18:42:16    

ton . à la ligne 15 n'est pas échappé, je doute que ça vienne de là mais on sait jamais.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 11-10-2008 à 18:47:50    

j'avais pas conscience qu'il fallait echappé le .
 j'ai ajouté un \ avant, ça change rien :/


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

Marsh Posté le 11-10-2008 à 19:13:46    

Citation :


The open function takes two arguments: the first is a filehandle, and the second is a single string comprising both what to open and how to open it


 
te manque pas un ">" ( ou "+>" ) devant le nom du fichier ? Sans rien ça défaulte à "<" qui veut dire lecture, donc qui nécéssite que le fichier soit créé.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 11-10-2008 à 19:16:56    

Code :
  1. open (OUT, ">$nameInput" )


 
 c'etait ça [:jar jar]
 
je l'ai sur d'autres fichiers en plus, oubli stupide. merci [:romf]


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

Marsh Posté le 11-10-2008 à 19:26:49    

Tu l'as dans le premier post du sujet surtout. [:ineffable]

Reply

Marsh Posté le 11-10-2008 à 19:28:05    

[:pingouino]
 
 alors à l'origine ça venait de ma substitution, et ensuite de ça [:ciler]


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

Sujets relatifs:

Leave a Replay

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