Mettre espace entre chiffres

Fermé
HDç& - 27 mars 2009 à 13:22
 HDç& - 27 mars 2009 à 15:25
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 mars 2009 à 13:41
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
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
27 mars 2009 à 13:56
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
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > HDç&amp;
27 mars 2009 à 14:36
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
27 mars 2009 à 14:45
merci je ferai attention la prochaine fois.
je vais essayer
0
HDç&amp; > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
27 mars 2009 à 14:55
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
27 mars 2009 à 15:25
super tout fonctionne avec l'exemple que je t'ai donné
merci
0