Fortran - Cordes
Le langage Fortran peut traiter les caractères comme des caractères uniques ou des chaînes contiguës.
Une chaîne de caractères peut ne comporter qu'un seul caractère ou même être de longueur nulle. Dans Fortran, les constantes de caractères sont données entre une paire de guillemets doubles ou simples.
Le type de données intrinsèque characterstocke des caractères et des chaînes. La longueur de la chaîne peut être spécifiée parlen specifier. Si aucune longueur n'est spécifiée, c'est 1. Vous pouvez faire référence à des caractères individuels dans une chaîne faisant référence par position; le caractère le plus à gauche est en position 1.
Déclaration de chaîne
La déclaration d'une chaîne est la même que les autres variables -
type-specifier :: variable_name
Par exemple,
Character(len = 20) :: firstname, surname
vous pouvez attribuer une valeur comme,
character (len = 40) :: name
name = “Zara Ali”
L'exemple suivant illustre la déclaration et l'utilisation du type de données caractère -
program hello
implicit none
character(len = 15) :: surname, firstname
character(len = 6) :: title
character(len = 25)::greetings
title = 'Mr.'
firstname = 'Rowan'
surname = 'Atkinson'
greetings = 'A big hello from Mr. Beans'
print *, 'Here is', title, firstname, surname
print *, greetings
end program hello
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here isMr. Rowan Atkinson
A big hello from Mr. Bean
Concaténation de chaînes
L'opérateur de concaténation //, concatène les chaînes.
L'exemple suivant illustre ceci -
program hello
implicit none
character(len = 15) :: surname, firstname
character(len = 6) :: title
character(len = 40):: name
character(len = 25)::greetings
title = 'Mr.'
firstname = 'Rowan'
surname = 'Atkinson'
name = title//firstname//surname
greetings = 'A big hello from Mr. Beans'
print *, 'Here is', name
print *, greetings
end program hello
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here is Mr. Rowan Atkinson
A big hello from Mr. Bean
Extraction de sous-chaînes
Dans Fortran, vous pouvez extraire une sous-chaîne d'une chaîne en indexant la chaîne, en donnant l'index de début et de fin de la sous-chaîne dans une paire de crochets. C'est ce qu'on appelle le spécificateur d'étendue.
L'exemple suivant montre comment extraire la sous-chaîne 'world' de la chaîne 'hello world' -
program subString
character(len = 11)::hello
hello = "Hello World"
print*, hello(7:11)
end program subString
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
World
Exemple
L'exemple suivant utilise le date_and_timefonction pour donner la chaîne de date et d'heure. Nous utilisons des spécificateurs d'étendue pour extraire séparément les informations sur l'année, la date, le mois, l'heure, les minutes et la seconde.
program datetime
implicit none
character(len = 8) :: dateinfo ! ccyymmdd
character(len = 4) :: year, month*2, day*2
character(len = 10) :: timeinfo ! hhmmss.sss
character(len = 2) :: hour, minute, second*6
call date_and_time(dateinfo, timeinfo)
! let’s break dateinfo into year, month and day.
! dateinfo has a form of ccyymmdd, where cc = century, yy = year
! mm = month and dd = day
year = dateinfo(1:4)
month = dateinfo(5:6)
day = dateinfo(7:8)
print*, 'Date String:', dateinfo
print*, 'Year:', year
print *,'Month:', month
print *,'Day:', day
! let’s break timeinfo into hour, minute and second.
! timeinfo has a form of hhmmss.sss, where h = hour, m = minute
! and s = second
hour = timeinfo(1:2)
minute = timeinfo(3:4)
second = timeinfo(5:10)
print*, 'Time String:', timeinfo
print*, 'Hour:', hour
print*, 'Minute:', minute
print*, 'Second:', second
end program datetime
Lorsque vous compilez et exécutez le programme ci-dessus, il donne des informations détaillées sur la date et l'heure -
Date String: 20140803
Year: 2014
Month: 08
Day: 03
Time String: 075835.466
Hour: 07
Minute: 58
Second: 35.466
Couper les chaînes
le trim function prend une chaîne et retourne la chaîne d'entrée après avoir supprimé tous les espaces de fin.
Exemple
program trimString
implicit none
character (len = *), parameter :: fname="Susanne", sname="Rizwan"
character (len = 20) :: fullname
fullname = fname//" "//sname !concatenating the strings
print*,fullname,", the beautiful dancer from the east!"
print*,trim(fullname),", the beautiful dancer from the east!"
end program trimString
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Susanne Rizwan , the beautiful dancer from the east!
Susanne Rizwan, the beautiful dancer from the east!
Réglage gauche et droit des cordes
La fonction adjustl prend une chaîne et la renvoie en supprimant les blancs de début et en les ajoutant en tant que blancs de fin.
La fonction adjustr prend une chaîne et la renvoie en supprimant les blancs de fin et en les ajoutant comme blancs de début.
Exemple
program hello
implicit none
character(len = 15) :: surname, firstname
character(len = 6) :: title
character(len = 40):: name
character(len = 25):: greetings
title = 'Mr. '
firstname = 'Rowan'
surname = 'Atkinson'
greetings = 'A big hello from Mr. Beans'
name = adjustl(title)//adjustl(firstname)//adjustl(surname)
print *, 'Here is', name
print *, greetings
name = adjustr(title)//adjustr(firstname)//adjustr(surname)
print *, 'Here is', name
print *, greetings
name = trim(title)//trim(firstname)//trim(surname)
print *, 'Here is', name
print *, greetings
end program hello
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
Here is Mr. Rowan Atkinson
A big hello from Mr. Bean
Here is Mr. Rowan Atkinson
A big hello from Mr. Bean
Here is Mr.RowanAtkinson
A big hello from Mr. Bean
Recherche d'une sous-chaîne dans une chaîne
La fonction index prend deux chaînes et vérifie si la deuxième chaîne est une sous-chaîne de la première chaîne. Si le second argument est une sous-chaîne du premier argument, alors il renvoie un entier qui est l'index de départ de la seconde chaîne de la première chaîne, sinon il retourne zéro.
Exemple
program hello
implicit none
character(len=30) :: myString
character(len=10) :: testString
myString = 'This is a test'
testString = 'test'
if(index(myString, testString) == 0)then
print *, 'test is not found'
else
print *, 'test is found at index: ', index(myString, testString)
end if
end program hello
Lorsque vous compilez et exécutez le programme ci-dessus, il produit le résultat suivant -
test is found at index: 11