supprimer le premier ligne d'un fichier

supprimer le premier ligne d'un fichier - Perl - Programmation

Marsh Posté le 31-03-2017 à 10:32:53    

Bonjour à tous,
J'ai une répertoire contenant plusieurs fichiers, le but est de supprimer le premier ligne à partir de chaque fichier ,
j'ai développé ce code, mais le résultat est que tous les fichiers sont vides , pouvez vous m'aider à trouver l'erreur ?

Code :
  1. use strict;
  2. use warnings;
  3. use utf8;
  4. use Encode;
  5. use Encode::Guess;
  6. use Devel::Peek;
  7.  
  8.  
  9.  
  10.  
  11. my $new_directory = '/home/lenovo/Bureau/MesTravaux/SuppPremierLigne/corpus';
  12.  
  13.  
  14. my $directory = '/home/lenovo/Bureau/MesTravaux/SuppPremierLigne/corpus';
  15.  
  16. my $FichierResulat = '/home/lenovo/Bureau/MesTravaux/SuppPremierLigne/rrrrr';
  17. open( my $FhResultat, '>:encoding(UTF-8)', $FichierResulat );
  18. my $dir = '/home/lenovo/Bureau/MesTravaux/SuppPremierLigne/corpus';
  19. opendir (DIR, $directory) or die $!;
  20. my @tab;
  21. while (my $file = readdir(DIR)) {
  22.  
  23.        # Use a regular expression to ignore files beginning with a period
  24. next if ($file eq "." or $file eq ".." );
  25.    #print "$file\n";
  26. my $filename_read = decode('utf8', $file);
  27.        #print $FichierResulat "$file\n";
  28. push @tab, "$filename_read";
  29.  
  30.    }
  31.  
  32.    closedir(DIR);
  33.  
  34. foreach my $val(@tab){
  35. #print $FhResultat $val;
  36. utf8::encode($val);
  37. my $filename = $val;
  38. open(my $in, '<:utf8', $filename) or die "Unable to open '$filename' for read: $!";
  39. my $newfile = "$filename.new";
  40. open(my $out, '>:utf8', $newfile) or die "Unable to open '$newfile' for write: $!";
  41. my @ins = <$in>; # read the contents into an array
  42. chomp @ins;
  43.     # close the file handle
  44.    shift @ins; # remove the first element from the array    
  45.    #ecrire chaque ligne dans le fichier destinataire
  46.    print $out   @ins;
  47. close($in);
  48. close $out;
  49. #unlink($filename);
  50. rename $newfile,$filename or die "unable to rename '$newfile' to '$filename': $!";
  51.  
  52. }
 

NB : mes fichiers sont des textes arabes, aussi les titres de ces fichiers sont aussi en arabe

Message cité 1 fois
Message édité par mouda le 31-03-2017 à 10:36:41
Reply

Marsh Posté le 31-03-2017 à 10:32:53   

Reply

Marsh Posté le 31-03-2017 à 15:22:11    

mouda a écrit :

Bonjour à tous,
J'ai une répertoire contenant plusieurs fichiers, le but est de supprimer le premier ligne à partir de chaque fichier ,
j'ai développé ce code, mais le résultat est que tous les fichiers sont vides , pouvez vous m'aider à trouver l'erreur ?

Code :
  1. use strict;
  2. use warnings;
  3. use autodie;
  4.  
  5. my $directory  = '/home/lenovo/Bureau/MesTravaux/SuppPremierLigne/corpus';
  6.  
  7. opendir (my $dh, $directory);
  8. my @files = grep {!/^\.\.?$/} readdir($dh);
  9. closedir($dh);
  10.  
  11. foreach my $file (@files) {
  12.  open (my $fh, '+<', $file);
  13.  # on lit le contenu comme un array
  14.  my @content = <$fh>;
  15.  # on vire la première ligne
  16.  shift @content;
  17.  # on rewind le fichier avant d'écrire dedans
  18.  seek($fh, 0, 1);
  19.  # on écrit dans le fichier
  20.  print $fh, join('', @content);
  21.  close($fh);
  22. }


 
NB : mes fichiers sont des textes arabes, aussi les titres de ces fichiers sont aussi en arabe


Un truc comme ça, ça le fait pas?
 
A+,


Message édité par gilou le 31-03-2017 à 15:22:51

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

Marsh Posté le 31-03-2017 à 15:36:47    

non il m'affiche l'erreur 'No such file or directory' at /home/lenovo/Bureau/MesTravaux/remove_first_line.pl line 13
peut être parce que les noms des fichiers sont aussi en arabe ?

Reply

Marsh Posté le 31-03-2017 à 15:58:43    

Mais non, c'est parce que tu appelles sur le nom sans path.
Il faut faire
open (my $fh, '+<', $directory.'/'.$file);
 
C'est un truc de base de perl: si je lis un nom de fichier avec readdir, alors le nom convient pour un open.
 
A+,


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

Marsh Posté le 31-03-2017 à 16:01:52    

J'ai remplacé mais sur le terminal il m'affiche :GLOB(0x8a884bc)GLOB(0x8aacd88)  
et les fichiers ne sont pas modifiés (pas de suppression de premier ligne)

Reply

Marsh Posté le 31-03-2017 à 20:47:16    

Et tu peux pas réfléchir un peu?
Il affiche GLOB(0x8a884bc)GLOB(0x8aacd88) donc il imprime deux valeurs a l’écran; ou dans le code y a t'il une instruction pour imprimer? un seul endroit, la ligne print $fh, join('', @content); et on voit tout de suite l'erreur: une virgule de trop, il fallait un print $fh join('', @content);
 
A+,


Message édité par gilou le 31-03-2017 à 20:48:06

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

Marsh Posté le 31-03-2017 à 22:34:01    

Merci pour la réponse et pour le temps perdu à me répondre..

Reply

Sujets relatifs:

Leave a Replay

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