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

  FORUM HardWare.fr
  Programmation
  Perl

  supprimer le premier ligne d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

supprimer le premier ligne d'un fichier

n°2298450
mouda
Posté le 31-03-2017 à 10:32:53  profilanswer
 

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
mood
Publicité
Posté le 31-03-2017 à 10:32:53  profilanswer
 

n°2298506
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 15:22:11  profilanswer
 

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é!  --
n°2298510
mouda
Posté le 31-03-2017 à 15:36:47  profilanswer
 

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 ?

n°2298514
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 15:58:43  profilanswer
 

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é!  --
n°2298515
mouda
Posté le 31-03-2017 à 16:01:52  profilanswer
 

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)

n°2298524
gilou
Modérateur
Modzilla
Posté le 31-03-2017 à 20:47:16  profilanswer
 

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é!  --
n°2298536
mouda
Posté le 31-03-2017 à 22:34:01  profilanswer
 

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


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

  supprimer le premier ligne d'un fichier

 

Sujets relatifs
selection ligne tableau pour requêteanalyse fichier log sous ubuntu
Executer une ligne de commande windows en javaLire un fichier Json
Récupérer Nom Collaborateur utilisant un fichiersupprimer des voyelles dans une chaine de caracteres
Ecrire un fichier sur le serveur en Javascriptsupprimer retour à la ligne
perl et fichier XML 
Plus de sujets relatifs à : supprimer le premier ligne d'un fichier


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