Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'alignement de chiffres

4 réponses
Avatar
noone
Bonjour,

j'ai le script suivant :

open(FILE,">h2o_calc.pdb") or die("Erreur d'=E9criture");

# D=E9finition de la fonction qui ajoute un atome dans le fichier .pdb
sub print_atom {
printf(FILE "ATOM %d %s %1.3f %1.3f
%1.3f"."\n",
$_[0],$_[1],$_[2],$_[3],$_[4]);
}

# Calcul de pi (petite astuce vieille comme le monde informatique)
$pi =3D 4*atan2(1, 1);

# D=E9finition des constantes
# Liaison O-H 0.0957nm =3D 0.957A (et pas 0,957)
# Angle 104.52=B0
$l_OH =3D 0.957;
$alpha =3D 104.52*$pi/180; # angle en rad

# En t=EAte du fichier .pdb
print FILE "HEADER"."\n";
print FILE "COMPND H2O calc"."\n";
print FILE "HEAD"."\n";


# Partie centrale du fichier .pdb (ex : mol=E9cule d'eau)
#&print_atom(num=E9ro_atome_dans_le_fichier_pdb, symbole_de_l_atome,
# x,
# y,
# z
# );

&print_atom(1, O, 0, 0, 0);

&print_atom(2, H, $l_OH, 0, 0);

&print_atom(3, C, $l_OH * cos($alpha), $l_OH * sin($alpha), 0);

print FILE "CONECT 1 2 3"."\n";


# Fin du fichier .pdb
print FILE "END"."\n";
print FILE "TAIL"."\n";

close(FILE);


J'ai un soucis car j'obtiens

HEADER
COMPND H2O calc
HEAD
ATOM 1 O 0.000 0.000 0.000
ATOM 2 H 0.957 0.000 0.000
ATOM 3 C -0.240 0.926 0.000
CONECT 1 2 3
END
TAIL

le signe - (de -0.240) ne devrait pas =EAtre sous le 0 de 0.957
tout devrait =EAtre d=E9cal=E9 vers la gauche...

Je ne sais pas comment faire

j'ai cherch=E9 un peu avec des mots comme "perl aligne signe moins"
mais sans grand succ=E8s.

Une id=E9e ?

Merci

PS : si vous avez des suggestions sur mon script (une syntaxe plus
Perlienne, etc...)
Merci de me le dire... je suis juste d=E9butant en Perl

4 réponses

Avatar
noone
Petite erreur...

Il faut comprendre :

&print_atom(3, H, $l_OH * cos($alpha), $l_OH * sin($alpha), 0);

HEADER
COMPND H2O calc
HEAD
ATOM 1 O 0.000 0.000 0.000
ATOM 2 H 0.957 0.000 0.000
ATOM 3 H -0.240 0.926 0.000
CONECT 1 2 3
END
TAIL

mais bon ça ne change pas fondamentale le problème de l'alignement

D'ailleurs ce qui est dingue c'est que Rasmol (ou JMol) pête
complètement les plombs
juste à cause de ça
Avatar
noone
Bon en fait j'ai trouvé

il suffit de remplacer %1.3 par % 1.3 et d'enlever un espace avant le %

Désolé pour le bruit
Avatar
Paul Gaborit
À (at) 23 Nov 2006 13:08:21 -0800,
"" écrivait (wrote):
Bon en fait j'ai trouvé

il suffit de remplacer %1.3 par % 1.3 et d'enlever un espace avant le %

Désolé pour le bruit


Sauf qu'il semble que vous n'aevz pas encore complètement compris le
fonctionnement du 'format' de printf. Dans la documentation Perl,
toutes les explications sont dans 'perlfunc' à l'item de la fonction
'sprintf' :

perldoc -f sprintf

On y trouve effectivement l'ajout de l'espace pour placer soit un
espace soit un moins selon que la valeur est positive ou négative.

Mais il y est aussi expliqué que le premier chiffre est la longueur
*totale* *minimale* du champ contenant un nombre et non celle de sa
partie entière. Donc si vous souhaitez aligner des nombres avec 3
décimales et un signe (sous la forme d'un espace ou d'un moins), cela
fait une longueur minimale de 3 (les décimales) + 1 (la séparateur
décimal) + 1 (le signe) + 1 (la partie entière) et donc un format du
genre :

% 6.3f

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
noone
Merci c'est corrigé