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

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] regrouper des lignes différentes en une seule ttes les n lignes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] regrouper des lignes différentes en une seule ttes les n lignes

n°687615
perchut2
Hell, it's about time...
Posté le 30-03-2004 à 17:34:51  profilanswer
 

Bonjour  :hello:  
 
Voilà, j'essaie de faire sous perl le truc suivant :
 
j'ai un fichier qui se présente comme ca :
 


 
 
 
 
 
ligne1
ligne2
ligne3
ligne4
ligne5
ligne6
ligne7
ligne8
ligne9
ligne10
ligne 11


 
et je voudrais le transformer en ca :
 

ligne1,ligne2,ligne3,ligne4,....,ligne9
ligne10,ligne11...,ligne 18
etc...


 
c'est à dire :
virer les premières lignes vides (y peut y en avoir d'autres dont j'ai besoin), et regrouper les lignes en champs, toutes les 9 lignes...
 
quelqu'un saurait comment faire ca ?

mood
Publicité
Posté le 30-03-2004 à 17:34:51  profilanswer
 

n°687708
pospos
Posté le 30-03-2004 à 18:33:29  profilanswer
 

oui c'est pas trop dur à faire en Perl
 
un truc genre :

Code :
  1. use strict;
  2. open(IN, '<', shift) || die "usage: $0 fichier\n";
  3. my $i = 1;
  4. # on saute les lignes vides
  5. while(<IN> ) {
  6. unless (/^\s*$/) {
  7.  # on ecrit la premiere ligne...
  8.  s/\n/, /;
  9.  print;
  10.  # ... et on sort
  11.  last;
  12. }
  13. }
  14. # on ecrit les lignes suivante,
  15. # avec un saut de lignes toutes les 9 lignes
  16. while(<IN> ) {
  17. s/\n/, / if ++$i % 9;
  18. print;
  19. }
  20. close IN;


Message édité par pospos le 30-03-2004 à 18:38:32
n°687800
perchut2
Hell, it's about time...
Posté le 30-03-2004 à 20:44:20  profilanswer
 

pospos a écrit :

oui c'est pas trop dur à faire en Perl
 
un truc genre :

Code :
  1. use strict;
  2. open(IN, '<', shift) || die "usage: $0 fichier\n";
  3. my $i = 1;
  4. # on saute les lignes vides
  5. while(<IN> ) {
  6. unless (/^\s*$/) {
  7.  # on ecrit la premiere ligne...
  8.  s/\n/, /;
  9.  print;
  10.  # ... et on sort
  11.  last;
  12. }
  13. }
  14. # on ecrit les lignes suivante,
  15. # avec un saut de lignes toutes les 9 lignes
  16. while(<IN> ) {
  17. s/\n/, / if ++$i % 9;
  18. print;
  19. }
  20. close IN;




 
merci beaucoup, j'étudie ca apres le java  :jap:  :hello:

n°687882
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2004 à 22:23:44  profilanswer
 

tiens sinon tu peux essayer ça ( mais c'est pas super si ton fichier est énorme)

Code :
  1. open(IN, 'tonfichier.txt');
  2. my @lines = <IN>;
  3. my $text = join '', @lines;
  4. $text =~ s/(( |)\n)+/,/gs;
  5. $text =~ s/^,//;
  6. $text =~ s/,$//;
  7. $text =~ s/((([^,]*),){8})/$1\n/gs;
  8. print $text."\n";
  9. close IN;

n°689742
drigaudier​e
Perl or die;
Posté le 01-04-2004 à 14:31:42  profilanswer
 

Perchut2 a écrit :

Bonjour  :hello:  
 
c'est à dire :
virer les premières lignes vides (y peut y en avoir d'autres dont j'ai besoin), et regrouper les lignes en champs, toutes les 9 lignes...
 
quelqu'un saurait comment faire ca ?


 
Je propose ceci :
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my $datafile       = 'tst_hfr_1';     # fichier de donnees
  4. my $max_buff_lines = 9;               # nb lignes a concatener
  5. my $joint_str = ', ';                 # chaine de jointure pour concatener les lignes
  6. my @buffer;
  7. my $in_data;
  8. open FH, "<$datafile" or die "Unable to open $datafile : $!";
  9. while(<FH> ) {
  10.     # ignore une ligne vide (ou avec des blancs)
  11.     # si on a pas encore rencontré de donnée
  12.     next if not $in_data and m/^\s*$/;
  13.    
  14.     # une ligne non vide, on flag
  15.     $in_data = 1;
  16.     chomp;
  17.     push @buffer, $_;   
  18.     # on vide le buffer si il est plein
  19.     flush_buffer() if @buffer == $max_buff_lines;
  20. }
  21. # vide le buffer
  22. flush_buffer();
  23. sub flush_buffer {
  24.     print join($joint_str, @buffer);
  25.     print "\n";
  26.     @buffer = ();
  27. }
  28. close FH;
  29. __END__


 
--  
David "Sniper" Rigaudiere
Les mongueurs de Perl - http://www.mongueurs.net
Les Journées Perl 2004 - http://conferences.mongueurs.net/2004
 


Message édité par drigaudiere le 01-04-2004 à 14:40:32

---------------

n°689798
pospos
Posté le 01-04-2004 à 15:02:56  profilanswer
 

tiens un mongueur!
je vois parfois ton nom sur la liste ppm (je la survole, mais je n'y participe pas)

n°689852
drigaudier​e
Perl or die;
Posté le 01-04-2004 à 15:36:33  profilanswer
 

pospos a écrit :

tiens un mongueur!
je vois parfois ton nom sur la liste ppm (je la survole, mais je n'y participe pas)


 
La non participation se pardonne, ne pas venir boire un coup avec
nous aux réunions mensuelles si t'es sur Paris c'est innadmissible :)
 
 
--  
David "Sniper" Rigaudiere
Les mongueurs de Perl - http://www.mongueurs.net
Les journées Perl 2004 - http://conferences.mongueurs.net/2004


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

  [Perl] regrouper des lignes différentes en une seule ttes les n lignes

 

Sujets relatifs
[Perl] Package Cvs 0.06Probleme d'execution de la commande Unix echo via le perl
[SQL][résolu] 2 colonnes en 1 seuleperl Makefile.PL
Limiter le nombre de lignes comptées par COUNT(*) [maj : ça marche !]Comptage de lignes de code C ou Java sous Windows
Programme en C qui affiche n lignes demandés[Eclipse] Plusieurs lignes de tabs dans l'IDE ?
[Perl] probleme avec sub - subroutine [résolu -> howto inside][Perl] parcourir un fichier à partir d'une certaine ligne
Plus de sujets relatifs à : [Perl] regrouper des lignes différentes en une seule ttes les n lignes


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