FAQ Fortran
FAQ FortranConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 70, dernière mise à jour : 23 juillet 2021
Une chaîne de caractères se note entre guillemets simples ou doubles. On affecte une valeur à une chaîne de caractères avec le signe = comme pour les autres types de variables.
character
(len
=20)::chaine
chaine = "une chaine de caractère"
Une chaîne de caractères a une certaine longueur, donnée lors de sa déclaration (le paramètre len). Elle ne peut pas contenir plus de caractères que le nombre indiqué lors de sa déclaration. Si la chaîne de caractères que l'on veut enregistrer dans une variable est plus longue que la longueur de la variable, seuls les premiers caractères sont enregistrés. Si la chaîne de caractères que l'on veut enregistrer dans une variable est plus courte que la longueur de la variable les caractères manquants sont complétés par des espaces (peut dépendre du compilateur).
character
(len
=4)::courte
character
(len
=20)::longue
courte = "bonjour"
! la variable courte ne contient que "bonj"
longue = "bonjour"
! la variable longue contient "bonjour "
On utilise la fonction len qui renvoie un entier dont la valeur est la longueur de la chaine.
character
(len
=100)::mot
integer
::long
! longueur de mot
long = len
(mot)
mot = "bonjour"
! dans mot on a mis la chaine de caractères "bonjour" pour connaitre la longueur
! de cette chaine on doit en premier supprimer les blancs en bout de chaine
! on utilise trim
long = len
( trim( mot ) )
! dans ce cas long = 7 qui est la taille de bonjour
La fonction index(chaine1,chaine2) renvoit un entier dont la valeur est égale à la position du premier caractère de chaine2 dans chaine1. Si chaine2 n'est pas présente dans chaine1 elle renvoit 0.
Cette fonction peut être très utile par exemple pour repérer une ligne dans un fichier où est inscrit un repère.
...
character
(len
=100)::ligne
integer
::k
! ouverture du fichier
open
(10,file="resultats"
,action="read"
)
! recherche du repère
Do
ligne = ""
read
(10,"(a)"
)ligne
k = index
( ligne , "repere"
)
! si k n'est pas 0 c'est que ligne contient "repere"
If
( k /=
0 ) exit
Enddo
! lecture des informations souhaitées sur ligne ou sur la suite du fichier
...
Les commandes read et write permettent de lire ou écrire dans une chaîne de caractères. Il suffit d'inscrire le nom de la chaîne de caractères dans source de lecture ou la destination d'écriture.
! écriture dans num
integer
::k
character
(len
=4)::num
k=1234
write
(num,"(i4)"
)k
! * * * * * * * * *
! lecture dans ligne
character
(len
=100)::ligne
character
(len
=4)::var
! ligne contient " x = 3 "
read
(ligne,*)var,entier
L'écriture dans une variable chaîne de caractères par rapport à une simple affectation présente l'intérêt que l'on peut choisir le format dans lequel on écrit.
On utilise la fonction trim qui renvoie une chaîne de caractères dans laquelle les espaces à la fin de la chaîne ont été supprimés.
character
(len
=10)::chaine
chaine = "bonjour"
write
(*,*)chaine,"XX"
! résultats :bonjour XX
write
(*,*)trim(chaine),"XX"
! résultats :bonjourXX
Attention, Fortran complète automatiquement les chaînes de caractères par des espaces, donc si on remplace le contenu d'une variable chaîne de caractères par son contenu en ayant supprimé les espaces ils sont rajoutés automatiquement pour compléter la longueur de la variable chaîne de caractères.
! on reprend l'exemple précédent
character
(len
=10)::chaine
character
(len
=7)::courte
chaine = "bonjour"
! chaine contient "bonjour "
chaine = trim(chaine)
! comme les caractères manquants sont complétés par des espaces
! chaine contient toujours "bonjour "
courte = trim(chaine)
! courte contient "bonjour"
La fonction trim est très utile pour écrire des noms de fichier dans une variable chaîne de caractères car elle permet d'avoir des noms de fichiers sans espaces.