Ecriture entier de longueur variable sans espace
Bonjour à tous,
J'ai besoin d'une routine qui écrit un nombre (mettons un entier) de longueur variable d'un appel de la routine à l'autre en supprimant les espaces de début.
J'ai expérimenté deux solutions "maison" qui marchent très bien mais si quelqu'un a une idée qui ressemble moins à de la dibouille, je suis preneuse !! Et si non (sniff !), laquelle me conseilleriez-vous ? J'ai opté pour la seconde plus facilement adaptable à d'autres types de nombre.
Solution 1 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
Integer :: val !entier*4
Integer :: i
Character(len=6) :: fmt
Do i = 1, 10
If ((i==10).or.(abs(val) < 10**i)) Then
If (val<0) then
write(fmt,'(A,I2,A)') '(I',i+1,')'
write(*,fmt) val
Else If (val>=0) then
write(fmt,'(A,I2,A)') '(I',i,')'
write(*,fmt) val
End If
Exit
End If
End Do |
Solution 2 :
Code:
1 2 3 4 5 6 7 8
|
Integer :: val !entier*4
Integer :: i = 1
Character(len=12) :: charVal
write(charVal,'(I)') val
i = verify(charVal,' ')
write(*,'(A)') charVal(i:len_trim(charVal)) |
Merci à tous !
Mathlus.
C'est ce que j'ai pensé aussi...
Mais non !
J'ai écrit un petit programme idiot qui vient lire un real à l'écran et le réécrit. Si tu laisses en format libre, pas de problème mais si tu imposes un nombre de décimales (mettons 4 si on travaille avec des real*4. si j'en demande plus, suis d'accord, ça peut pas marcher), je t'assure qu'avec certains nombres, tu as des surprises...