با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در جلسه یازدهم از آموزش های دوره فرترن ، فراخوانی رشته ها در فرترن و سایر توابع رشته ها در فرترن را بررسی خواهیم کرد.زبان فرترن می تواند کاراکترها را به عنوان کاراکترهای تکی یا رشته های پیوسته پردازش کند.یک رشته کاراکتر ممکن است تنها یک حرف در طول رشته باشد، یا حتی می تواند صفر باشد. در فرترن، ثابت های کاراکتری بین یک جفت یا یک نقل قول قرار می گیرند.کاراکتر داده نوع درونی شخصیت ها و رشته ها را ذخیره می کند.طول رشته را می توان با مشخص کننده len مشخص کرد. اگر هیچ طولی مشخص نشده باشد، در این صورت مقدار آن برابر ۱ می شود.
فراخوانی رشته ها در فرترن مانند متغیرهاست .
1 | type-specifier :: variable_name |
برای مثال :
1 | Character(len = 20) :: firstname, surname |
شما همچنین می توانید یک مقدار را به رشته اختصاص دهید :
1 2 | <span class="pln">character </span><span class="pun">(</span><span class="pln">len </span><span class="pun">=</span> <span class="lit">40</span><span class="pun">)</span> <span class="pun">::</span><span class="pln"> name name </span><span class="pun">=</span> <span class="pun">“</span><span class="typ">Zara</span> <span class="typ">Ali</span><span class="pun">”</span> |
مثال زیر نشان دهنده اعلان و استفاده از نوع داده کاراکتر است :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
هنگامی که شما برنامه فوق را اجرا و کامپایل میکنید، نتیجه زیر تولید می شود :
1 2 | Here is Mr. Rowan Atkinson A big hello from Mr. Bean |
برای ترکيب رشته ها از علامت // استفاده می گردد.
به مثال زیر توجه کنید :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
هنگامی که شما برنامه فوق را اجرا و کامپایل میکنید، نتیجه زیر تولید می شود :
1 2 | Here is Mr. Rowan Atkinson A big hello from Mr. Bean |
استخراج بخشی از رشته يا پيوند دو رشته به يکديگر. استخراج بخشی از رشته با قرار دادن علامت : بين شروع و پايان بخش مورد نظر صورت می گيرد. این مشخص کننده محدوده است.مثال زیر نشان می دهد که چگونه رشته “world” را از رشته “hello world” استخراج کنیم :
1 2 3 4 5 6 7 | program subString character(len = 11)::hello hello = "Hello World" print*, hello(7:11) end program subString |
هنگامی که شما برنامه فوق را اجرا و کامپایل میکنید، نتیجه زیر تولید می شود :
1 | World |
مثال زیر از تابع date_and_time برای دادن تاریخ و رشته زمان استفاده می کند. ما از مشخصه های گوناگون برای استخراج سال، تاریخ، ماه، ساعت، دقیقه و اطلاعات دوم به طور جداگانه استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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 |
هنگامی که برنامه فوق را کامپایل و اجرا میکنید، اطلاعات دقیق تاریخ و زمان را ارائه داده می شود :
1 2 3 4 5 6 7 8 | Date String: 20140803 Year: 2014 Month: 08 Day: 03 Time String: 075835.466 Hour: 07 Minute: 58 Second: 35.466 |
تابع trim یک رشته را می گیرد و رشته ورودی را پس از حذف تمام سطوح خالی باز می گرداند. برای مثال :
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
هنگامی که برنامه فوق را اجرا و کامپایل میکنید، نتیجه زیر تولید می شود :
1 2 | Susanne Rizwan , the beautiful dancer from the east! Susanne Rizwan, the beautiful dancer from the east! |
تنظیم مرتب شدن شدن رشته ها
تابع adjust یک رشته را می گیرد و آن را با از بین بردن فواصل خالی مرتب می کند.
مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 |
هنگامی که برنامه فوق را اجرا و کامپایل می کنید، نتیجه زیر تولید می شود :
1 2 3 4 5 6 | 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 |
تابع index دو رشته را می گیرد و بررسی می کند که رشته دوم یک زیر رشته از رشته اول است، اگر دومین آرگومان یک زیرمجموعه از اولین آرگومان باشد، یک عدد صحیح باز می گرداند که علامت شروع رشته دوم در رشته اول است، در غیر اینصورت صفر را باز می گرداند.مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
هنگامی که برنامه فوق را اجرا و کامپایل می کنید، نتیجه زیر تولید می شود :
1 | test is found at index: 11 |
سایر توابع مقايسه رشته ها مانند LGE ،LGT ،LLE و LLT و بسيارس از توابع ديگر وجود دارند که در صورت نياز امکان مطالعه آنها را خواهيد داشت. امیدوارم از مطالب ذکر شده بهره کافی را برده باشید. با ما همراه باشید تا در جلسه بعد آرایه ها در فرترن را بررسی نماییم.