Fortran - Stringlər

Fortran String Handling

Ümumi Məlumat

Fortran dili simvolları həm tək simvollar, həm də ardıcıl simvollar (stringlər) kimi idarə edə bilir. Bir stringin uzunluğu bir simvol ola bilər və ya boş ola bilər. Fortran-da simvol sabitləri ya tək, ya da ikiqat tırnak içərisində yerləşdirilir.

İçsel character verilənlər tipi həm simvolları, həm də stringləri saxlamaq üçün istifadə olunur. Bir stringin uzunluğu len təyin edicisi ilə göstərilə bilər və əgər təyin edilməzsə, standart olaraq uzunluğu 1 olaraq qəbul edilir. Bir stringin içindəki hər bir simvola mövqeyinə əsasən, sol tərəfdən 1-dən başlayaraq daxil ola bilərsiniz.

String Deklarasiyası

Bir stringi elan etmək, digər dəyişənləri elan etmək kimi oxşardır:

type-specifier :: variable_name

Məsələn:

character(len = 20) :: firstname, surname

Bir stringə dəyərləri belə təyin edə bilərsiniz:

character(len = 40) :: name
name = "Zara Ali"

Məsələn: Character Verilən Tipini Deklare Etmək və İstifadə Etmək

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

Çıxış:

Here is Mr.   Rowan          Atkinson       
A big hello from Mr. Beans

String Birleştirmə

Birleştirmə operatoru // stringləri birləşdirir. Budur, bir nümunə:

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

Çıxış:

Here is Mr. Rowan Atkinson       
A big hello from Mr. Beans

Alt Stringlər Çıxarma

Fortran-da bir stringin başlanğıc və son indekslərini göstərərək alt string çıxara bilərsiniz. Bu, "extent specifier" adlanır. Budur, bir nümunə:

program subString
  character(len = 11) :: hello
  hello = "Hello World"
  print *, hello(7:11)
end program subString

Çıxış:

World

Məsələn: Tarix və Vaxt Məlumatlarını Çıxarma

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)

  ! Breaking dateinfo into year, month, and 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

  ! Breaking timeinfo into hour, minute, and 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

Çıxış:

Date String: 20140803
Year: 2014
Month: 08
Day: 03
Time String: 075835.466
Hour: 07
Minute: 58
Second: 35.466

Stringləri Kəsmək

trim funksiyası stringdən son boşluqları çıxarır. Budur, bir nümunə:

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

Çıxış:

Susanne Rizwan      , the beautiful dancer from the east!
Susanne Rizwan, the beautiful dancer from the east!

Stringlərin Sol və Sağ Tənzimlənməsi

adjustl funksiyası ön boşluqları çıxarır və onları son boşluqlar kimi əlavə edir. adjustr funksiyası isə əksinə, son boşluqları çıxarır və onları ön boşluqlar kimi əlavə edir.

Məsələn:

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

Çıxış:

Here is Mr. Rowan  Atkinson           
A big hello from Mr. Beans
Here is Mr. Rowan Atkinson    
A big hello from Mr. Beans
Here is Mr.RowanAtkinson                        
A big hello from Mr. Beans

Stringdə Alt String Axtarma

index funksiyası bir stringin digərinin alt stringi olub olmadığını yoxlayır. Bu funksiya alt stringin başlanğıc indeksini qaytarır və tapılmadığı halda 0 qaytarır.

Məsələn:

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

Çıxış:

test is found at index: 11