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

  FORUM HardWare.fr
  Programmation
  Perl

  tailles de lignes fixes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

tailles de lignes fixes

n°1772617
riffer
Posté le 12-08-2008 à 17:42:28  profilanswer
 

Bonjour  :hello: ,
 
Je suis en train de développer un script shell (ksh) qui manipule du contenu de fichiers.  
Mon fichier en sortie doit avoir ses lignes avec une longueur fixe.
Cependant mon fichier peut contenir des caractères binaires 00 01 02 ... qui sont interprétés comme des retour chariot par la plupart des commandes shell comme sed, cut, awk ...
J'ai découvert que les commandes perl réagissent bien avec les "low values".
 
Il me reste un problème : fixer la taille finale des lignes (tronquer chaque ligne à une taille fixe)
 
Voici le bout de script qui me pose problème :
(le cut tronquera au premier low value trouvé sans considérer la suite de la ligne)
 
tailleLigne=100 #par exemple
cat $fichierIn | cut -b 1-${tailleLigne} >> $fichierOut

 
Je n'ai pas trouvé d'exemple de ce style (pack(), substring(), split() ... ?)  :heink:  
Merci pour votre aide

mood
Publicité
Posté le 12-08-2008 à 17:42:28  profilanswer
 

n°1772807
gilou
Modérateur
Modzilla
Posté le 13-08-2008 à 11:12:47  profilanswer
 

Si tu as une chaine de texte $string, et que tu veux la decouper en un array @string_parts de sous-chaines de taille $maxSize, il y a le code suivant, particulièrement élégant:
@string_parts = $string =~ /(.{1,$maxSize})/go;
 
Apres, il te suffit d'adapter a tes besoins.
Par exemple ce code ci va tronquer a 8 caracteres par ligne un fichier passé en entrée:

Code :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. my $maxSize = 8;
  5. while (<STDIN> ) {
  6.    print /(.{1,$maxSize})/o, "\n";
  7. }


Tandis que celui la va wrapper a 8 caracteres par ligne un fichier passé en entrée:

Code :
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. my $maxSize = 8;
  5. while (<STDIN> ) {
  6.    print ((join "\n", (/(.{1,$maxSize})/go)), "\n" );
  7. }


 
A+,


Message édité par gilou le 13-08-2008 à 11:25:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1772926
riffer
Posté le 13-08-2008 à 15:40:38  profilanswer
 

Merci pour ta réponse, le premier exemple répond exactement à mon besoin :)
 
Intégré dans mon script sh ça donne :

perl -e 'my $maxSize = $ARGV[0];
while (<STDIN> ) {
   print /(.{1,$maxSize})/o, "\n";
}' $tailleLigne < $fichierIn > $fichierOut

 
 :hello:


Message édité par riffer le 13-08-2008 à 17:07:22
n°1778795
dreameddea​th
Posté le 28-08-2008 à 01:03:40  profilanswer
 

perl étant l'ami des choses écrites en une ligne, il peut y avoir plus "court"
 

Code :
  1. /*avec la regexp*/
  2. perl -e 'print map{(/(.{1,$ARGV[0]})/o)[0]."\n"} <>' $taille_line <$fic_in > $fic_out
  3. /*ou encore autre possibilité avec substring*/
  4. perl -e 'print map{substr($_,0,$ARGV[0])."\n"}<>' $taille_line < $fic_in > $fic_out


Message édité par dreameddeath le 29-08-2008 à 00:56:15

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

  tailles de lignes fixes

 

Sujets relatifs
Connaître le nombre de lignes dans un fichier[AS3] Tracer des lignes
Indicer les lignes d'un fichier texte avec C++Extraire lignes d'un fichier .csv avec Visual C++
Requète sur plusieurs lignes[VBA/Excel]Filtre Auto et copie des lignes résultantes
Nbre de lignes OracleComparer lignes d'un fichier avec enregistrements table
Passiver plusieurs lignes VBA d'un coupSuppression de lignes sous conditions
Plus de sujets relatifs à : tailles de lignes fixes


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