[Fortran g77] Comment convertir une chaîne de caractères en entier ?
Bonsoir à tous,
J'ai un petit souci dans une de mes sous-routines en Fortran. Dans celle-ci, je fais la déclaration suivante :
puis ensuite, j'entre la ligne de commande suivante :
=> Cette commande génère une erreur lors de la compilation avec g77.
(Cette sous routine se compile sans problème (juste un warning) avec f77 sous UNIX)
Existe-t-il une fonction fortran qui permet de convertir un caractère en entier ?
Merci pour votre aide.
PS: j'utilise OS: Linux (Debian Sarge, avec compilateur g77)
Convertir un caractère en entier
En Fortran 95:
Code:
1 2 3 4 5 6 7
|
character (10) s
integer k
s = '123'
read(s,*) i
write(*,*) i ! Écrira 123
end |
En Fortran 77, la combinaison internal (lecture/écriture sur un caractère) et list-directed (format *) n'est pas standard, donc non garantie de fonctionner. Tu auras peut-être à modifier de la façon suivante :
Code:
1 2 3 4 5 6 7 8 9
|
character*10 s
character*10 fmt
integer k
s = '123'
fmt = '(i3)'
read(s,fmt) i
write(*,*) i ! Écrira 123
end |
Toujours en F77, si la longueur de la chaîne à lire est variable, tu auras à ajuster dynamiquement le format de lecture :
Code:
1 2 3 4
|
s = '123'
write(fmt,'(a,i1,a)') = '(i',len_trim(s),'3)'
read(s,fmt) i |
Si len_trim() n'existe pas, tu devras l'écrire ou modifier le code. Il est aussi possible que l'idée te vienne d'utiliser un langage plus récent que 30 ans...
Voici ce que j'ai trouvé..qu'en dites vous?
Bonjour,
Hier soir, je me suis intéressé à la fonction equivalence() et voici comment je l'ai utilisée :
Code:
1 2 3 4 5 6 7
| PROGRAM toto
INTEGER*4 x
CHARACTER*4 y
EQUIVALENCE (x,y)
y='titi'
write(*,'(A)') x
END |
Cette solution est plus adaptée pour moi (je voudrais migrer un logiciel de calcul de UNIX compilateur f77 sous LINUX compilateur g77).
La conversion de type est faite de manière implicite sous f77 mais génère une erreur sous g77.
J'ai modifié les parties de codes qui créaient cette erreur et maintenant cela fonctionne.
Merci pour votre aide.
PS: la fonction ichar() ne fait que convertir le premier caractère de la chaîne que l'on met en argument en un entier. Elle renvoit la valeur ascii du caractère.
Si vous avez X=ichar('m1'), Y=ichar('m2') et Z=ichar('m3') alors => X=Y=Z