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