inclure variable dans nom de fichiers crées

inclure variable dans nom de fichiers crées - Perl - Programmation

Marsh Posté le 09-04-2011 à 19:55:12    

bonsoir,
 
 je vous explique mon probleme en perl. à l'aide d'opendir et de readdir je lis les noms des fichier d'un repertoir que je stocke successivement  dans $fichier. mais impossible de me servir de $fichier pour donner un nom à un fichier créer qui est en lien avec celui ouvert.comment faire
 
#!/usr/bin/perl -w
 
 
opendir (REP,"textebase" );
while ($fichier=readdir(REP) )  
{print $fichier;open (descripteur1,">$fichier.txt" );print descripteur1 "aaa"}
closedir(REP);  
 

Reply

Marsh Posté le 09-04-2011 à 19:55:12   

Reply

Marsh Posté le 09-04-2011 à 21:23:51    

Au minimum, il manque un close sur le fichier ouvert.
#!/usr/bin/perl -w
 
 
opendir (REP,"textebase" );
while ($fichier=readdir(REP) )  
{print $fichier;open (descripteur1,">$fichier.txt" );print descripteur1 "aaa"; close descripteur1;}
closedir(REP);  

 

Tu veux faire quoi exactement? remplacer le contenu de chaque fichier du répertoire par "aaa"?
A+,


Message édité par gilou le 09-04-2011 à 21:24:11

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-04-2011 à 22:43:01    

Bon, sinon, il faudrait peut être pas écrire du perl antédiluvien avec des variables globales:
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use autodie qw(open close);   # open/close succeed or die
  5.  
  6. my $dirname = "textebase";
  7. opendir my $dirhandle, $dirname;
  8. foreach my $filename (readdir($dirhandle)) {
  9.  if (-f $filename) {  # readdir retourne aussi les répertoires, ainsi que . et .. ce que tu veux sans doute pas
  10.    print $filename, "\n";  # faut au moins séparer les noms par un blanc ou une ligne sinon c'est illisible
  11.    open my $filehandle, '>', $filename;
  12.    print $filehandle "aaa";
  13.    close $filehandle;
  14.  }
  15. }
  16. closedir $dirhandle;


Bon, ça fait pas plus que ton code initial, aux vérifications près, mais c'est plus propre et lisible.
Quand tu auras clairement expliqué ce que tu veux faire, on pourra progresser.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 10-04-2011 à 00:41:24    

pardon pour le retard
je veux que le nom de mes fichiers qui étaient dans le premier répertoire me serve à coder partiellement le nom de mes fichiers que je vais creer.
je m'explique je pars par exemple dans REP j'ai un fichier zidane et un fichier platini et je veux avoir après le programme les deux fichiers zidane2011 et platini2011. le preobleme est que j'essaye de faire ça avec le programme mes nouveaux fichiers se nomment . et ..

Reply

Marsh Posté le 10-04-2011 à 09:58:44    

C'est parce que tu ne changes pas le nom de ton fichier que tu écris.

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use autodie qw(open close);   # open/close succeed or die
  5.  
  6. my $dirname = "textebase";
  7. opendir my $dirhandle, $dirname;
  8. foreach my $filename (readdir($dirhandle)) {
  9.  if (-f $filename) {
  10.    print $filename, "\n";  
  11.    open my $filehandle, '>', $filename."aaa"; #ici, on ouvre le fichier dont le nom est celui initial plus aaa
  12.    # et ici tu fais ce que tu veux avec ce nouveau fichier créé
  13.    # si tu veux copier, il faut
  14.    # 1) ouvrir en lecture $filename
  15.    # 2) lire ligne à ligne le fichier (boucle)
  16.    # 3) écrire la ligne dans le fichier créé
  17.    # 4) fermer le fichier en lecture
  18.    close $filehandle;
  19.    # Mais tout ça se fait plus facilement avec un module, File::Copy
  20.  }
  21. }
  22. closedir $dirhandle;


 
La manière basique de faire avec File::Copy

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use autodie qw(open close);   # open/close succeed or die
  5. use File::Copy; #module pour la copie de fichier
  6.  
  7. my $dirname = "textebase";
  8. my $extension = "aaa";
  9. opendir my $dirhandle, $dirname;
  10. foreach my $filename (readdir($dirhandle)) {
  11.  if (-f $filename) {
  12.    print $filename, "\n";
  13.    copy($filename, $filename.$extension);
  14.  }
  15. }
  16. closedir $dirhandle;


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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