Mettre espace entre chiffres

HDç& -  
 HDç& -
Bonjour,
Je dois mettre en forme un tableau de valeur en perl.
Le format d'entrée est le suivant :
< 0 0| 0 0 > 0.100E+01 0.100E+01 0.00
< 1 1| 0 0 > -0.852E-06 0.726E-12 -58.50
< 1 0| 1 0 > 0.100E+01 0.100E+01 0.00
< 0 1| 1 0 > -0.555E-07 0.308E-14 -10.16
< 1 0| 0 1 > 0.280E-06 0.782E-13 10.16
< 0 1| 0 1 > 0.100E+01 0.100E+01 0.00
< 0 0| 1 1 > 0.108E-05 0.116E-11 58.50
le résultat doit être :
<00|00> 0.100E+01 0.100E+01 0.00
<11|00> -0.852E-06 0.726E-12 -58.50
<10|10> 0.100E+01 0.100E+01 0.00
<01|10> -0.555E-07 0.308E-14 -10.16
<10|01> 0.280E-06 0.782E-13 10.16
<01|01> 0.100E+01 0.100E+01 0.00
<00|11> 0.108E-05 0.116E-11 58.50
En clair, je dois séparer ce tableaux en 4 colonnes avec comme délimiteur au moins un espace.
merci d'avance pour votre aide
<00|00> 0.100E+010.100E+010.00

2 réponses

lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Il y a peut être mieux ;-) Vu que je suis au boulot je t'ai fait vite fait ça (je n'ai pas testé)
#!/usr/bin/perl
use strict; use warnings;

while(<DATA>){
  s/<\s*([01])\s*([01])\|\s*([01])\s*([01])\s*>/<$1${2}|$3$4> /;
  s/\s+/ /;
  print;
}
__END__
< 0 0| 0 0 > 0.100E+01 0.100E+01 0.00 
< 1 1| 0 0 > -0.852E-06 0.726E-12 -58.50 
< 1 0| 1 0 > 0.100E+01 0.100E+01 0.00 
< 0 1| 1 0 > -0.555E-07 0.308E-14 -10.16 
< 1 0| 0 1 > 0.280E-06 0.782E-13 10.16 
< 0 1| 0 1 > 0.100E+01 0.100E+01 0.00 
< 0 0| 1 1 > 0.108E-05 0.116E-11 58.50 
0
HDç&amp;
 
merci beaucoup je vais essayer.
Il y a toutefois un problème car la partie qui se trouve entre < et > peut-être de longueur différente et comporter d'autres chiffres que 0 ou 1.
De plus si j'ai bien compris ta réponse, il reste des espaces entre par exemple <0 0 | 0 0>.
merci beaucoup
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

peut-être de longueur différente et comporter d'autres chiffres que 0 ou 1.

Au lieu de [01] mets \d+
Non, il ne reste pas des espaces entre < >.

En fait ce qui est après __END__ ce n'est pas un résultat, mais ce le texte lu par le handle DATA
0
HDç&amp;
 
merci,
je vais essayer, mais il semble que ta solution ne marche que si je suis dans le cas ou j'ai <chiffre chiffre |chiffre chiffre>. N'y a t-il pas une solution plus générale?
merci
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > HDç&amp;
 
Re,

Oui il y a.
C'est pour ça que la question doit être plus précise ;-)
On ne peux pas imaginer tout ce que le demandeur veut ;-))

au lieu de [01] mets .*?--
106485010510997108
0
HDç&amp; > lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
merci je ferai attention la prochaine fois.
je vais essayer
0
HDç&amp; > lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
je vais essayer d'être plus précis.
Je vais préciser ce que j'entends par cas plus général.
Je peux avoir dans mes résultats : c représentant un chiffre < c | c>, < c c | c c >, <c ..........c |c.......c >,
<c | c .......c>. le nombre de chiffres de part et d'autre de | étant à priori inconnu.
Suis je plus clair?
merci
0
HDç&amp; > lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
super tout fonctionne avec l'exemple que je t'ai donné
merci
0