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

  FORUM HardWare.fr
  Programmation
  Perl

  supprimer la premiere ligne d'un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

supprimer la premiere ligne d'un fichier

n°2257184
Henri772
Posté le 02-05-2015 à 07:18:57  profilanswer
 

salut a tous j'ai besoin une fois de plus de votre aide .
j'ai un code donc je ne comprend pas ce qui ce passe j'arrive a supprimer la premiere ligne de mon fichier le result_3.csv le confirme, et dans la suite le fichier result_3.csv doit etre prise en consideration pour la suite, mais mahlheureusement lors de la sorti la ligne apparait de nouveau.
 

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. open(my $tmp, '>','result_3.csv') or die $!;   #je cree mon fichier result_3.csv
  5. open(my $fh, '<', 'result_2.csv') or die $!;    #j'ouvre mon fichier ou la premiere ligne doit etre efface
  6. @ARGV = ("result_2.csv" );        # le fichier est argumente
  7. #je supprime la premiere ligne
  8. while(<> ){
  9.     print $tmp "$_"  if 2 .. eof();  # j'ecris le resultat sur mon fichier result_3.csv
  10. }
  11. my $i = 0;
  12. my $n = 0;       #compteur pour les noms des fichiers produits
  13. my $fh_out;
  14. open($fh_out, '>', "output-$n.csv" ) or die $!;
  15. while (my $line = <$fh> ) {    # c'est a ce niveau qu'il ya probleme car j'aimerai pour la suite de mon code le fichier result_3.csv soit pris en concideration meme en ecrivant $tmp cela ne   m'apporte rien
  16.     print $fh_out $line;
  17.     if ($. % 10 == 0) {
  18.         close $fh_out;
  19.         # on ouvre un nouveau fichier
  20.         $n++;
  21.   $i++;
  22.         open($fh_out, '>', "output-$n.csv" ) or die $!;
  23.  print $fh_out "page $i\n";
  24.     }
  25. }


Message édité par Henri772 le 02-05-2015 à 07:34:15
mood
Publicité
Posté le 02-05-2015 à 07:18:57  profilanswer
 

n°2257187
Henri772
Posté le 02-05-2015 à 07:28:31  profilanswer
 

?


Message édité par Henri772 le 02-05-2015 à 07:29:30
n°2257188
Henri772
Posté le 02-05-2015 à 07:39:04  profilanswer
 

c'est resolut j'ai vu mon erreur, merci bien mais pourquoi ca ne me mensionne pas le numero sur la premiere page

n°2257208
gilou
Modérateur
Modzilla
Posté le 02-05-2015 à 20:11:41  profilanswer
 

Heu, si j'ai bien compris, c'est un truc comme ceci que vous voulez faire:
 

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my ($n, $i) = (0, 0);
  7. open(my $fh_out, '>', "output-$n.csv" );
  8. open(my $fh_in,  '<', 'result_2.csv');
  9. while (<$fh_in> ) {
  10.  if ($i) {
  11.    unless ($i % 10) {
  12.      close $fh_out;
  13.      open($fh_out, '>', "output-".++$n.".csv" );
  14.      print $fh_out "page $n \n";
  15.    }
  16.    print $fh_out $_;
  17.  }
  18.  ++$i;
  19. }
  20. close($fh_out);
  21. close($fh_in);


 
A moins que ce ne soit ceci, au vu de votre dernière phrase:

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my ($n, $i) = (0, 0);
  7. my ($fh_in, $fh_out);
  8. open($fh_in,  '<', 'result_2.csv');
  9. while (<$fh_in> ) {
  10.  unless ($i % 10) {
  11.    close($fh_out) if ($n);
  12.    open($fh_out, '>', "output-$n.csv" );
  13.    print $fh_out "page $n \n";
  14.    ++$n;
  15.  }
  16.  print($fh_out $_) if ($i);
  17.  ++$i;
  18. }
  19. close($fh_out);
  20. close($fh_in);


Quand on accède a plus d'un fichier à la fois, il vaut mieux éviter d'utiliser $., d’où mon emploi de $i.
 
A+,


Message édité par gilou le 02-05-2015 à 20:28:45

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2257304
Henri772
Posté le 04-05-2015 à 16:19:17  profilanswer
 

Salut Gilou c'est le deuxieme code qui est le bon , j'avais entre temps revu mon code et resolu le probleme mais je trouve le tient meilleur que le mien car dans le mien il yavais des repetions et c'etait pas agreable. comme je l'avais mensionner par ailleur j'apprend

n°2257319
Henri772
Posté le 04-05-2015 à 17:49:06  profilanswer
 

Henri772 a écrit :

Salut Gilou c'est le deuxieme code qui est le bon , j'avais entre temps revu mon code et resolu le probleme mais je trouve le tient meilleur que le mien car dans le mien il yavais des repetions et c'etait pas agreable. comme je l'avais mensionner par ailleur j'apprend


 
voila mon code:
 

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. open(my $tmp, '>','result_3.csv') or die $!;
  5. open(my $fh, '<', 'result_2.csv') or die $!;
  6. @ARGV = ("result_2.csv" );
  7. while(<> ){
  8.     print $tmp "$_"  if 2 .. eof();
  9. }
  10. my $i = 0;
  11. my $n = 0;   
  12. my $fh_out;
  13. open($fh_out, '>', "output-$n.csv" ) or die $!;
  14. print $fh_out "page $i\n";
  15. open($tmp, '<', "result_3.csv" ) or die $!;
  16. while (my $line = <$tmp> ) {
  17.     print $fh_out $line;
  18.     if ($. % 10 == 0) {
  19.         close $fh_out;
  20.         # on ouvre un nouveau fichier
  21.         $n++;
  22.   $i++;
  23.         open($fh_out, '>', "output-$n.csv" ) or die $!;
  24.  print $fh_out "page $i\n";
  25.     }
  26. }


Message édité par Henri772 le 04-05-2015 à 17:49:51
n°2257329
Henri772
Posté le 04-05-2015 à 18:57:30  profilanswer
 

j'ai aussi remarque un truc lorsque j'execute ton Code, normalement dans le decoupage le dernier fichier est celui qui devrai avoir moins de Nom de system , mais c'est le contraire que ton code fait , le premier fichier a moin de Nom de system

n°2257344
gilou
Modérateur
Modzilla
Posté le 05-05-2015 à 00:40:56  profilanswer
 

> le dernier fichier est celui qui devrai avoir moins de Nom de system
ça veut dire quoi :??:  
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2257387
Henri772
Posté le 05-05-2015 à 11:52:03  profilanswer
 

si tu a 35 Mot a repartir en page , et que par page on aimerai avoir 10 Mots la premiere page jusqu'a la 3e page aurons 10 mot par page et la derniere n'en possederai que 5 mots c'est environs ce que je voulais dire par la

n°2257394
gilou
Modérateur
Modzilla
Posté le 05-05-2015 à 15:23:30  profilanswer
 

Le premier a une ligne de moins parce que tu veux sauter la première ligne du fichier de départ, mais si tu veux qu'il ait 10 lignes de contenu, comme les autres, c'est très facile:

Code :
  1. #!/usr/bin/env perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5.  
  6. my ($n, $i) = (0, 0);
  7. my ($fh_in, $fh_out);
  8. open($fh_in,  '<', 'result_2.csv');
  9. my $junk = <$fh_in>; # on saute la première ligne
  10. while (<$fh_in> ) {
  11.  unless ($i % 10) {
  12.    close($fh_out) if ($n);
  13.    open($fh_out, '>', "output-$n.csv" );
  14.    print($fh_out "page $n \n" ) if ($n); # virer le if ($n) si on veut le titre aussi pour le premier fichier
  15.    ++$n;
  16.  }
  17.  print($fh_out $_);
  18.  ++$i;
  19. }
  20. close($fh_out);
  21. close($fh_in);


 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 05-05-2015 à 15:23:30  profilanswer
 

n°2257699
Henri772
Posté le 08-05-2015 à 12:18:32  profilanswer
 

Salut Gilou  
j'avais une question car je ne comprend pas exactement ce que fait le Module autodie.  
 
Merci bien

n°2257700
gilou
Modérateur
Modzilla
Posté le 08-05-2015 à 12:48:12  profilanswer
 

Le module autodie, c'est simple, il déclenche un die automatique lorsque l'on a un problème d'ouverture/fermeture/... de fichier.
Ça permet d'écrire
open($fh,  '<', 'fichier.txt');
plutôt que
open($fh,  '<', 'fichier.txt') or die "Erreur a l'ouverture de fichier.txt!\n;
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2257703
Henri772
Posté le 08-05-2015 à 13:44:07  profilanswer
 

Merci bien, c'est maintenant tres clair
 
Bonne Journee

n°2257899
Henri772
Posté le 12-05-2015 à 09:38:35  profilanswer
 

Salut Gilou,
j'ai une question concernant les chaines de Caracteres du genre  
 
{/(^|[\s.;])$item([\s.;]|$)/i}
 
si vous en connaissez des liens en Francais qui explique cela. j'en ai trouvé des liens en anglais mais en Francais, me conviendrai.
Merci bien et bonne journee

n°2257934
gilou
Modérateur
Modzilla
Posté le 12-05-2015 à 13:43:58  profilanswer
 

Bonjour,
 
Vous pourriez jeter un œil aux liens de cette page ci: http://perl.mines-albi.fr/DocFr.html
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2258111
Henri772
Posté le 14-05-2015 à 11:52:04  profilanswer
 

Salut  
que pui je changer ou ajouter a cette ligne de maniere a ce qu'il fasse une difference entre 1 et 10 ainsi que entre 2 et 20 ainsi de suite  
 
my $regex = join '|', map {"\Q${_}\E"} @words; :??:  
 
car depuis pres de 2 jours je lis les Expressions Regulair mais je ne trouve pas comment le resoudre
 
 
Merci bien d'avance

n°2258116
gilou
Modérateur
Modzilla
Posté le 14-05-2015 à 13:44:27  profilanswer
 

Si tu expliquais ce que tu veux faire, je pourrais aider. Parce que la, c'est loin d'être clair.
 
1) Tu as quoi en entrée? (ie dans @words)
2) et tu veux quoi en sortie dans $regexp?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2258118
Henri772
Posté le 14-05-2015 à 15:27:18  profilanswer
 

entree my @words = qw( disallow fault  /dev/lg_dumplv //ras 1);
mais il faut tenir compte que je peus aussi rechrcher autre chose.
 
sortie $regex    = qr{($regex)};  tout ce qu'il aura trouve


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

  supprimer la premiere ligne d'un fichier

 

Sujets relatifs
Lire une variable contenu dans un fichier durant une boucle ?retrouver un mot dans un Fichier
Decouper un fichierAide Fichier.bat info Regroupage info fichier texte
[Win7] Insertion de texte dans un nom de fichier lors d'un copyLire des fichier WAV avec le language Ada
Liste fichier expression régulière[RESOLU] Batch - copier des parties d'un fichier texte
[VBS] supprimer les 2 premiere ligne d'un fichierSupprimer la premiére ligne d'un fichier texte
Plus de sujets relatifs à : supprimer la premiere ligne d'un fichier


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