স্ট্রিং ম্যানিপুলেশন ফোরট্রানে (String Handling in Fortran)
ফোরট্রানে স্ট্রিং ম্যানিপুলেশন বা স্ট্রিং ডেটার সাথে কাজ করার বিভিন্ন ফিচার রয়েছে। character ডেটা টাইপ ব্যবহার করে স্ট্রিং ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণ করা হয়। ফোরট্রানে স্ট্রিং-এর দৈর্ঘ্য নির্ধারণ করতে হয় এবং স্ট্রিং ম্যানিপুলেশনের জন্য কয়েকটি বিল্ট-ইন ফাংশন ব্যবহার করা যায়।
১. স্ট্রিং ডিক্লারেশন এবং এসাইনমেন্ট
ফোরট্রানে স্ট্রিং ডিক্লার করতে character(len=...) সিনট্যাক্স ব্যবহার করা হয়, যেখানে len স্ট্রিং-এর দৈর্ঘ্য নির্ধারণ করে।
উদাহরণ:
character(len=10) :: str1
character(len=20) :: str2
str1 = "Hello"
str2 = "Fortran Programming"এখানে, str1 এবং str2 হলো দুটি স্ট্রিং ভেরিয়েবল, যার দৈর্ঘ্য যথাক্রমে 10 এবং 20।
২. স্ট্রিং যুক্তকরণ (String Concatenation)
ফোরট্রানে স্ট্রিং যুক্ত করতে // অপারেটর ব্যবহার করা হয়।
উদাহরণ:
character(len=20) :: str1, str2, result
str1 = "Hello"
str2 = "World"
result = str1 // " " // str2
! result হবে "Hello World"এখানে str1 এবং str2 কে যুক্ত করে result স্ট্রিং তৈরি করা হয়েছে।
৩. স্ট্রিং সাবস্ট্রিং (Substring Extraction)
ফোরট্রানে সাবস্ট্রিং তৈরি করতে স্ট্রিং-এর নির্দিষ্ট অংশ নির্বাচন করা যায়। [start:end] এর মাধ্যমে স্ট্রিং-এর নির্দিষ্ট অংশ পাওয়া যায়।
উদাহরণ:
character(len=20) :: str, sub_str
str = "Fortran Language"
sub_str = str(1:7)
! sub_str হবে "Fortran"এখানে str(1:7) ব্যবহার করে প্রথম থেকে সপ্তম ক্যারেক্টার পর্যন্ত অংশ নেওয়া হয়েছে।
৪. স্ট্রিং দৈর্ঘ্য (String Length)
ফোরট্রানে len_trim ফাংশন ব্যবহার করে স্ট্রিং-এর প্রকৃত দৈর্ঘ্য (অর্থাৎ ট্রিম করা দৈর্ঘ্য) নির্ধারণ করা যায়।
উদাহরণ:
character(len=20) :: str
integer :: length
str = "Fortran"
length = len_trim(str)
! length হবে 7এখানে len_trim স্ট্রিং-এর প্রকৃত দৈর্ঘ্য প্রদান করবে যা স্পেস বাদ দিয়ে গণনা করা হয়েছে।
৫. স্ট্রিং তুলনা (String Comparison)
ফোরট্রানে স্ট্রিং তুলনা করতে ==, /=, <, > অপারেটর ব্যবহার করা যায়।
উদাহরণ:
character(len=10) :: str1, str2
logical :: is_equal
str1 = "Hello"
str2 = "Hello"
is_equal = (str1 == str2) ! is_equal হবে .TRUE.এখানে str1 এবং str2 স্ট্রিং সমান কিনা তা পরীক্ষা করা হয়েছে।
৬. TRIM এবং ADJUSTL/ADJUSTR ফাংশন
TRIM ফাংশন: স্ট্রিং-এর শেষের অতিরিক্ত স্পেস সরিয়ে দেয়।
character(len=20) :: str, trimmed_str
str = "Fortran "
trimmed_str = trim(str)
! trimmed_str হবে "Fortran"ADJUSTL ফাংশন: স্ট্রিংটি বামদিকে অ্যাডজাস্ট করে।
character(len=20) :: str, left_adjusted
str = " Fortran"
left_adjusted = adjustl(str)
! left_adjusted হবে "Fortran "ADJUSTR ফাংশন: স্ট্রিংটি ডানদিকে অ্যাডজাস্ট করে।
character(len=20) :: str, right_adjusted
str = "Fortran "
right_adjusted = adjustr(str)
! right_adjusted হবে " Fortran"৭. INDEX ফাংশন
INDEX ফাংশন ব্যবহার করে একটি স্ট্রিং-এর মধ্যে নির্দিষ্ট সাবস্ট্রিং-এর অবস্থান নির্ধারণ করা যায়।
উদাহরণ:
character(len=20) :: str
integer :: position
str = "Fortran Programming"
position = index(str, "Programming")
! position হবে 9এখানে, "Programming" শব্দটি str স্ট্রিং-এর মধ্যে ৯তম অবস্থানে শুরু হয়েছে।
৮. REPEAT ফাংশন
REPEAT ফাংশন ব্যবহার করে একটি স্ট্রিং-এর নির্দিষ্ট সংখ্যক পুনরাবৃত্তি তৈরি করা যায়।
উদাহরণ:
character(len=20) :: repeated_str
repeated_str = repeat("AB", 5)
! repeated_str হবে "ABABABABAB"উপসংহার
ফোরট্রানে স্ট্রিং ম্যানিপুলেশন করার জন্য বিভিন্ন ধরনের ফাংশন এবং অপারেটর রয়েছে। এই ফাংশনগুলো স্ট্রিং কনক্যাটেনেশন, সাবস্ট্রিং, তুলনা এবং ট্রিম ইত্যাদি কাজে ব্যবহৃত হয়, যা বৈজ্ঞানিক এবং সাধারণ প্রোগ্রামিং উভয় ক্ষেত্রে প্রয়োজনীয়।
ফোরট্রানে CHARACTER টাইপের ব্যবহার
ফোরট্রানে CHARACTER টাইপ ব্যবহার করা হয় এমন ভেরিয়েবল বা অ্যারের জন্য যা স্ট্রিং (অক্ষরের সিকোয়েন্স) ধারণ করে। ফোরট্রানে স্ট্রিং মানগুলি CHARACTER ডেটা টাইপে সংরক্ষিত হয় এবং এটি সাধারণত টেক্সট প্রক্রিয়াজাতকরণের জন্য ব্যবহৃত হয়।
১. CHARACTER ভেরিয়েবল ডিক্লেয়ারেশন
ফোরট্রানে CHARACTER ভেরিয়েবল ডিক্লেয়ার করতে, তার দৈর্ঘ্য (length) উল্লেখ করা হয়, অর্থাৎ ওই স্ট্রিংটির সর্বাধিক সংখ্যা কতটি অক্ষর ধারণ করতে পারবে।
সিনট্যাক্স:
CHARACTER(LEN=<length>) :: <variable_name>এখানে, <length> হলো স্ট্রিংয়ের দৈর্ঘ্য (অক্ষরের সংখ্যা), এবং <variable_name> হলো ভেরিয়েবলের নাম।
উদাহরণ:
CHARACTER(LEN=20) :: name ! স্ট্রিং ভেরিয়েবল name এর দৈর্ঘ্য ২০এটি name নামক একটি স্ট্রিং ভেরিয়েবল তৈরি করবে, যা সর্বোচ্চ ২০টি অক্ষর ধারণ করতে সক্ষম।
২. স্ট্রিং ইনিশিয়ালাইজেশন
ফোরট্রানে স্ট্রিং ভেরিয়েবল ইনিশিয়ালাইজ করতে, আপনি স্ট্রিং মান (value) সরাসরি অ্যাসাইন করতে পারেন।
উদাহরণ:
CHARACTER(LEN=20) :: name
name = 'John Doe' ! স্ট্রিং 'John Doe' ইনিশিয়ালাইজ করা হচ্ছে
PRINT *, 'Name: ', nameআউটপুট:
Name: John Doeএখানে, name ভেরিয়েবলকে 'John Doe' স্ট্রিং দিয়ে ইনিশিয়ালাইজ করা হয়েছে।
৩. স্ট্রিংয়ের দৈর্ঘ্য পরিবর্তন
স্ট্রিংয়ের দৈর্ঘ্য পরিবর্তন করতে LEN ফাংশন ব্যবহার করা যেতে পারে। এটি একটি স্ট্রিংয়ের আসল দৈর্ঘ্য প্রদান করে, যেখানে কোনো অতিরিক্ত স্পেস থাকে না।
উদাহরণ:
CHARACTER(LEN=20) :: name
name = 'John'
PRINT *, 'Length of name: ', LEN(name)আউটপুট:
Length of name: 4এখানে LEN(name) ফাংশন স্ট্রিং 'John' এর দৈর্ঘ্য (৪) প্রদান করেছে।
৪. স্ট্রিং যুক্তকরণ (String Concatenation)
ফোরট্রানে স্ট্রিংগুলি একত্রিত (concatenate) করার জন্য // অপারেটর ব্যবহার করা হয়।
উদাহরণ:
CHARACTER(LEN=20) :: first_name, last_name, full_name
first_name = 'John'
last_name = 'Doe'
full_name = first_name // ' ' // last_name ! স্ট্রিং যুক্তকরণ
PRINT *, 'Full Name: ', full_nameআউটপুট:
Full Name: John Doeএখানে, first_name এবং last_name স্ট্রিং দুটি একত্রিত করে full_name তৈরি করা হয়েছে।
৫. স্ট্রিংয়ের সাবস্ট্রিং (Substring) অ্যাক্সেস
ফোরট্রানে স্ট্রিংয়ের একটি অংশ (subtring) অ্যাক্সেস করতে // অপারেটর এবং : ব্যবহার করা হয়। এটি স্ট্রিংয়ের নির্দিষ্ট অংশ থেকে সাবস্ট্রিং তৈরির জন্য ব্যবহৃত হয়।
উদাহরণ:
CHARACTER(LEN=20) :: text
text = 'Hello, World!'
PRINT *, 'Substring: ', text(1:5) ! প্রথম ৫টি অক্ষরআউটপুট:
Substring: Helloএখানে text(1:5) প্রথম ৫টি অক্ষর, অর্থাৎ "Hello" স্ট্রিংটি প্রিন্ট করবে।
৬. স্ট্রিংয়ের তুলনা (String Comparison)
ফোরট্রানে স্ট্রিংয়ের তুলনা করা যায় == অপারেটর দিয়ে।
উদাহরণ:
CHARACTER(LEN=20) :: str1, str2
str1 = 'Apple'
str2 = 'Apple'
IF (str1 == str2) THEN
PRINT *, 'The strings are equal.'
ELSE
PRINT *, 'The strings are not equal.'
END IFআউটপুট:
The strings are equal.এখানে, str1 এবং str2 স্ট্রিং দুটি সমান হওয়ায় ফলস্বরূপ আউটপুট হয়েছে The strings are equal.
৭. স্ট্রিংয়ের ইনপুট
ফোরট্রানে স্ট্রিংয়ের ইনপুট নেওয়ার জন্য READ স্টেটমেন্ট ব্যবহার করা হয়।
উদাহরণ:
CHARACTER(LEN=20) :: name
PRINT *, 'Enter your name:'
READ *, name
PRINT *, 'Hello, ', nameএখানে ব্যবহারকারী name ইনপুট দেবে, এবং সেটি আউটপুট হিসেবে প্রিন্ট হবে।
উপসংহার
ফোরট্রানে CHARACTER টাইপ ব্যবহারের মাধ্যমে আপনি স্ট্রিং প্রক্রিয়াজাতকরণের জন্য বিভিন্ন কাজ করতে পারবেন, যেমন:
- স্ট্রিং ভেরিয়েবল ডিক্লেয়ারেশন এবং ইনিশিয়ালাইজেশন।
- স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ এবং সাবস্ট্রিং অ্যাক্সেস।
- স্ট্রিং যুক্তকরণ এবং তুলনা।
- ইনপুট/আউটপুট প্রসেসিং।
এগুলো স্ট্রিংয়ের উপর কার্যক্রম পরিচালনা করার জন্য ফোরট্রানে খুবই কার্যকর এবং সুবিধাজনক ফিচার।
ফোরট্রানে স্ট্রিং Concatenation এবং Substring Extraction
ফোরট্রানে স্ট্রিং ম্যানিপুলেশন অনেকটা সরল, কিন্তু কিছু মূল কৌশল যেমন স্ট্রিং Concatenation (স্ট্রিং যোগ করা) এবং Substring Extraction (স্ট্রিং অংশ বের করা) করার জন্য নির্দিষ্ট সিনট্যাক্স এবং ফাংশন রয়েছে। এই কৌশলগুলি ব্যবহার করে আপনি স্ট্রিংয়ের সাথে কাজ করতে পারবেন।
১. স্ট্রিং Concatenation (স্ট্রিং যোগ করা)
ফোরট্রানে দুটি বা ততোধিক স্ট্রিং একত্রিত বা যোগ করার জন্য // অপারেটর ব্যবহার করা হয়। এটি দুটি স্ট্রিংয়ের মান একত্রিত করে একটি নতুন স্ট্রিং তৈরি করে।
স্ট্রিং Concatenation এর সাধারণ গঠন:
string3 = string1 // string2string1এবংstring2দুটি স্ট্রিং যোগ করে একটি নতুন স্ট্রিংstring3তৈরি হবে।
উদাহরণ:
program string_concatenation
implicit none
character(len=10) :: first_name, last_name, full_name
! স্ট্রিং ইনপুট
first_name = 'John'
last_name = 'Doe'
! স্ট্রিং Concatenation
full_name = first_name // ' ' // last_name ! একটি স্পেস দিয়ে যুক্ত করা হলো
print *, 'Full name: ', full_name ! আউটপুট হবে: Full name: John Doe
end program string_concatenationএখানে:
first_nameএবংlast_nameএর মান যুক্ত করা হয়েছে এবং তাদের মধ্যে একটি স্পেস (' ') যোগ করা হয়েছে।আউটপুট হবে:
Full name: John Doe
Concatenation অপারেটরের বৈশিষ্ট্য:
//অপারেটর দুটি বা তার বেশি স্ট্রিং যোগ করতে ব্যবহৃত হয়।- স্ট্রিংয়ের মধ্যে স্পেস বা অন্য যেকোনো ক্যারেক্টারও যোগ করা যায়।
২. Substring Extraction (স্ট্রিং অংশ বের করা)
ফোরট্রানে একটি স্ট্রিংয়ের অংশ বের করতে (start, length) সিনট্যাক্স ব্যবহার করা হয়। এর মাধ্যমে আপনি একটি স্ট্রিংয়ের নির্দিষ্ট অংশ বের করতে পারবেন।
স্ট্রিংয়ের অংশ বের করার গঠন:
substring = string(start, length)start: স্ট্রিংয়ের শুরু থেকে কোন ইনডেক্স থেকে সাবস্ট্রিং শুরু হবে (১ থেকে শুরু হয়)।length: সাবস্ট্রিংয়ের দৈর্ঘ্য।
উদাহরণ:
program substring_example
implicit none
character(len=20) :: full_name, first_part
! স্ট্রিং ইনপুট
full_name = 'Johnathan Doe'
! Substring Extraction (প্রথম 4 অক্ষর)
first_part = full_name(1:4)
print *, 'First part of name: ', first_part ! আউটপুট হবে: John
end program substring_exampleএখানে:
full_name(1:4)প্রথম ৪টি অক্ষর নিয়েfirst_partসাবস্ট্রিং তৈরি করেছে।আউটপুট হবে:
First part of name: John
Substring Extraction এর বৈশিষ্ট্য:
- স্ট্রিংয়ের প্রথম ইনডেক্স সাধারণত ১ থেকে শুরু হয় (ফোরট্রানে ইনডেক্সিং ১ থেকে শুরু হয়)।
startএবংlengthমান দিয়ে স্ট্রিংয়ের অংশ নির্ধারণ করা হয়।
৩. Substring Extraction এবং Concatenation একসাথে ব্যবহার
এটি সাধারণত প্রয়োজন হয় যখন আপনাকে একাধিক অংশ একত্রিত করতে হয় বা স্ট্রিংয়ের বিভিন্ন অংশ নিয়ে কাজ করতে হয়।
উদাহরণ:
program combined_example
implicit none
character(len=20) :: full_name, first_part, last_part, combined_name
! স্ট্রিং ইনপুট
full_name = 'Johnathan Doe'
! Substring Extraction
first_part = full_name(1:4) ! প্রথম ৪টি অক্ষর
last_part = full_name(10:12) ! ১০ থেকে ১২ ইনডেক্স পর্যন্ত
! স্ট্রিং Concatenation
combined_name = first_part // ' ' // last_part ! প্রথম এবং শেষ নাম একত্রিত করা
print *, 'Combined name: ', combined_name ! আউটপুট হবে: John Doe
end program combined_exampleএখানে:
first_part = full_name(1:4)প্রথম ৪টি অক্ষর বের করেছে।last_part = full_name(10:12)নামের শেষ অংশ বের করেছে।- তারপর দুটি অংশ
//অপারেটর দিয়ে একত্রিত করা হয়েছে। আউটপুট হবে:
Combined name: John Doe
৪. স্ট্রিং ম্যানিপুলেশন ফাংশন
ফোরট্রানে স্ট্রিংয়ের উপর বিভিন্ন প্রক্রিয়া প্রয়োগ করার জন্য কিছু বিল্ট-ইন ফাংশন রয়েছে:
LEN(string): একটি স্ট্রিংয়ের দৈর্ঘ্য ফেরত দেয়।TRIM(string): স্ট্রিংয়ের ডানপাশের অতিরিক্ত স্পেস সরিয়ে দেয়।ADJUSTL(string): স্ট্রিংয়ের বামপাশের অতিরিক্ত স্পেস সরিয়ে দেয়।
উদাহরণ:
program string_functions
implicit none
character(len=20) :: name
integer :: length_of_name
! স্ট্রিং ইনপুট
name = ' Johnathan '
! স্ট্রিংয়ের দৈর্ঘ্য বের করা
length_of_name = len(trim(name))
print *, 'Length of trimmed name: ', length_of_name ! আউটপুট হবে: 10
end program string_functionsএখানে:
trim(name)স্ট্রিংয়ের ডানপাশের অতিরিক্ত স্পেস সরিয়েছে।len(trim(name))স্ট্রিংয়ের দৈর্ঘ্য হিসাব করেছে।
উপসংহার
ফোরট্রানে স্ট্রিং Concatenation এবং Substring Extraction স্ট্রিং ম্যানিপুলেশন করার জন্য অত্যন্ত গুরুত্বপূর্ণ টুল। আপনি সহজেই স্ট্রিংয়ের অংশ বের করতে এবং স্ট্রিং যোগ করতে পারেন। এই কৌশলগুলি কোডের নমনীয়তা বাড়ায় এবং ডেটার প্রক্রিয়াকরণে সহায়ক হয়।
ফোরট্রানে LEN, TRIM, ADJUSTL, এবং ADJUSTR ফাংশনগুলির ব্যবহার
ফোরট্রানে LEN, TRIM, ADJUSTL, এবং ADJUSTR ফাংশনগুলি স্ট্রিং ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। এগুলির মাধ্যমে স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ, সাদা স্থান (whitespace) অপসারণ এবং স্ট্রিংয়ের মধ্যে সাদা স্থান সংযোজন করা যায়। নিচে এই ফাংশনগুলির ব্যবহার এবং ব্যাখ্যা দেওয়া হলো।
১. LEN (স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ)
LEN ফাংশনটি একটি স্ট্রিংয়ের দৈর্ঘ্য প্রদান করে, অর্থাৎ স্ট্রিংয়ে মোট কতটি চরিত্র রয়েছে তা বের করে। এটি স্ট্রিংয়ের আসল দৈর্ঘ্য (পদার্থগত চরিত্র সংখ্যা) নির্ধারণে ব্যবহৃত হয়।
উদাহরণ:
program len_example
character(len=20) :: str
integer :: len_result
str = "Hello, World!" ! স্ট্রিং ডিফাইন করা
len_result = len(str) ! স্ট্রিংয়ের দৈর্ঘ্য বের করা
print *, 'Length of the string is: ', len_result
end program len_exampleব্যাখ্যা:
- এখানে স্ট্রিং "Hello, World!" এবং LEN ফাংশন ব্যবহার করে দৈর্ঘ্য বের করা হয়েছে।
আউটপুট হবে:
Length of the string is: 13
২. TRIM (স্ট্রিংয়ের শেষের সাদা স্থান অপসারণ)
TRIM ফাংশনটি স্ট্রিংয়ের শেষের সাদা স্থান (trailing whitespace) অপসারণ করে। এটি মূল স্ট্রিংয়ের দৈর্ঘ্য পরিবর্তন না করে শুধু শেষে থাকা সাদা স্থান মুছে দেয়।
উদাহরণ:
program trim_example
character(len=20) :: str, trimmed_str
str = "Hello, World! " ! স্ট্রিংয়ের শেষে সাদা স্থান রয়েছে
trimmed_str = trim(str) ! সাদা স্থান অপসারণ
print *, 'Original string: "', str, '"'
print *, 'Trimmed string: "', trimmed_str, '"'
end program trim_exampleব্যাখ্যা:
- TRIM ফাংশনটি স্ট্রিং "Hello, World! " এর শেষে থাকা সাদা স্থান অপসারণ করবে, কিন্তু স্ট্রিংয়ের মূল অংশ অপরিবর্তিত থাকবে।
আউটপুট হবে:
Original string: "Hello, World! " Trimmed string: "Hello, World!"
৩. ADJUSTL (স্ট্রিংয়ের বাম দিকে সাদা স্থান সরানো)
ADJUSTL ফাংশনটি স্ট্রিংয়ের বাম দিক থেকে সাদা স্থান (leading whitespace) সরিয়ে দেয়। এটি স্ট্রিংয়ের প্রথম দিকে থাকা সাদা স্থান সরিয়ে দিয়ে স্ট্রিংয়ের শুরুতে অবশিষ্ট অংশ রাখে।
উদাহরণ:
program adjustl_example
character(len=20) :: str, adjusted_str
str = " Hello, World!" ! স্ট্রিংয়ের শুরুতে সাদা স্থান রয়েছে
adjusted_str = adjustl(str) ! বাম দিকের সাদা স্থান সরানো
print *, 'Original string: "', str, '"'
print *, 'Adjusted string: "', adjusted_str, '"'
end program adjustl_exampleব্যাখ্যা:
- ADJUSTL ফাংশনটি স্ট্রিং " Hello, World!" এর বাম দিকের সাদা স্থান সরিয়ে স্ট্রিংয়ের মূল অংশকে বাম দিকে স্থানান্তরিত করবে।
আউটপুট হবে:
Original string: " Hello, World!" Adjusted string: "Hello, World! "
৪. ADJUSTR (স্ট্রিংয়ের ডান দিকে সাদা স্থান সরানো)
ADJUSTR ফাংশনটি স্ট্রিংয়ের ডান দিক থেকে সাদা স্থান (trailing whitespace) সরিয়ে দেয় এবং স্ট্রিংটি ডান দিকে সরে যায়। এই ফাংশনটি স্ট্রিংয়ের ডান দিকের সাদা স্থান সরিয়ে দিয়ে বাম দিক থেকে শুরু হওয়া অংশ রাখে।
উদাহরণ:
program adjustr_example
character(len=20) :: str, adjusted_str
str = "Hello, World! " ! স্ট্রিংয়ের শেষে সাদা স্থান রয়েছে
adjusted_str = adjustr(str) ! ডান দিকের সাদা স্থান সরানো
print *, 'Original string: "', str, '"'
print *, 'Adjusted string: "', adjusted_str, '"'
end program adjustr_exampleব্যাখ্যা:
- ADJUSTR ফাংশনটি স্ট্রিং "Hello, World! " এর ডান দিকের সাদা স্থান সরিয়ে স্ট্রিংয়ের মূল অংশকে ডান দিকে সরে যাবে।
আউটপুট হবে:
Original string: "Hello, World! " Adjusted string: " Hello, World!"
সারাংশ
- LEN ফাংশন স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে।
- TRIM ফাংশন স্ট্রিংয়ের শেষের সাদা স্থান অপসারণ করে।
- ADJUSTL ফাংশন স্ট্রিংয়ের বাম দিকে সাদা স্থান সরিয়ে স্ট্রিংটিকে বাম দিকে সরে দেয়।
- ADJUSTR ফাংশন স্ট্রিংয়ের ডান দিকে সাদা স্থান সরিয়ে স্ট্রিংটিকে ডান দিকে সরে দেয়।
এই ফাংশনগুলো স্ট্রিং ম্যানিপুলেশন এবং প্রক্রিয়াকরণে ব্যবহৃত হয়, যেমন স্ট্রিংয়ের মধ্যে সাদা স্থান মুছে ফেলা, ডেটার ফরম্যাট ঠিক করা, এবং স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করা।
স্ট্রিং এবং অ্যারের মধ্যে পার্থক্য (Difference Between Strings and Arrays in Fortran)
ফোরট্রান-এ স্ট্রিং এবং অ্যারে দুটি ভিন্ন ধরনের ডেটা স্ট্রাকচার, এবং তাদের ব্যবহারের উদ্দেশ্য ও বৈশিষ্ট্যও আলাদা। নিচে স্ট্রিং এবং অ্যারের মধ্যে পার্থক্যগুলো আলোচনা করা হলো:
১. ডেটা টাইপ
স্ট্রিং:
- ফোরট্রান-এ স্ট্রিং একটি বিশেষ ধরনের ক্যারেক্টার অ্যারে, যা একাধিক ক্যারেক্টার ধারণ করতে পারে।
- এটি
characterডেটা টাইপের অংশ, এবং প্রতিটি স্ট্রিং একটি নির্দিষ্ট দৈর্ঘ্যের ক্যারেক্টারগুলির সমষ্টি হতে পারে।
উদাহরণ:
character(len=20) :: name name = "Fortran Programming"অ্যারে:
- অ্যারে একটি ডেটা স্ট্রাকচার যা একই ধরনের একাধিক উপাদান ধারণ করতে পারে। অ্যারেতে
integer,real,logical,characterইত্যাদি বিভিন্ন ডেটা টাইপের উপাদান থাকতে পারে। - অ্যারেটি সাধারণত এক বা একাধিক মাত্রায় হতে পারে (যেমন এক-মাত্রিক, দুই-মাত্রিক অ্যারে)।
উদাহরণ:
integer, dimension(5) :: numbers numbers = (/1, 2, 3, 4, 5/)- অ্যারে একটি ডেটা স্ট্রাকচার যা একই ধরনের একাধিক উপাদান ধারণ করতে পারে। অ্যারেতে
২. ডেটা স্টোরেজ এবং ব্যবস্থাপনা
স্ট্রিং:
- স্ট্রিংয়ের জন্য ফোরট্রান
character(len=n)ফর্ম্যাট ব্যবহার করে একটি নির্দিষ্ট দৈর্ঘ্যের ক্যারেক্টার স্টোর করে। - স্ট্রিংয়ের দৈর্ঘ্য এবং এর মধ্যে থাকা চরিত্রের সংখ্যা নির্দিষ্ট থাকে, তবে এটি ভিন্ন হতে পারে (যেমন
character(len=30)বাcharacter(len=50))।
উদাহরণ:
character(len=10) :: word word = "Hello"- স্ট্রিংয়ের জন্য ফোরট্রান
অ্যারে:
- অ্যারে এক বা একাধিক ডেটা টাইপের উপাদান ধারণ করতে পারে এবং এর আকার রানটাইমের আগে নির্ধারণ করা হয় (যদি তা ডাইনামিক অ্যারে না হয়)।
- অ্যারের উপাদানগুলি একই ডেটা টাইপের হতে হবে (যেমন সব উপাদান
integerবাrealহতে পারে)।
উদাহরণ:
real, dimension(3) :: numbers numbers = (/1.1, 2.2, 3.3/)
৩. ইনডেক্সিং
স্ট্রিং:
- স্ট্রিংয়ের প্রতিটি চরিত্র একটি নির্দিষ্ট অবস্থানে (ইনডেক্সে) থাকে, এবং ফোরট্রান স্ট্রিংয়ের ক্যারেক্টারগুলি ১-ভিত্তিক ইনডেক্স ব্যবহার করে অ্যাক্সেস করা হয়।
- স্ট্রিংয়ের জন্য ইনডেক্সের সীমা হলো ১ থেকে
len(string)।
উদাহরণ:
character(len=5) :: name name = "Fortran" print *, name(1) ! Output: 'F'অ্যারে:
- অ্যারেগুলির উপাদানগুলি ইনডেক্সিং করে অ্যাক্সেস করা হয়, তবে ইনডেক্স ১-ভিত্তিক বা ০-ভিত্তিক হতে পারে, যা নির্ভর করে ডেটা টাইপের ওপর।
উদাহরণ:
integer, dimension(5) :: arr arr = (/1, 2, 3, 4, 5/) print *, arr(2) ! Output: 2
৪. ডাইনামিক প্রকৃতি
স্ট্রিং:
- ফোরট্রানে স্ট্রিং-এর দৈর্ঘ্য ফিক্সড থাকে, তবে আপনি ডাইনামিক স্ট্রিং তৈরি করতে পারেন, কিন্তু এটি সাধারণত কম ব্যবহৃত হয়।
- স্ট্রিংটি নির্দিষ্ট দৈর্ঘ্যের ক্যারেক্টারের সমষ্টি হিসেবে ব্যবহৃত হয়।
উদাহরণ:
character(len=50) :: dynamic_string dynamic_string = "This is a dynamic string."অ্যারে:
- ফোরট্রান-এ অ্যারে ডাইনামিক হতে পারে, যার আকার প্রোগ্রাম চলাকালীন সময় পরিবর্তিত হতে পারে। এটি
allocateএবংdeallocateকমান্ডের মাধ্যমে মেমোরি বরাদ্দ এবং মুক্ত করা হয়।
উদাহরণ:
integer, allocatable :: arr(:) allocate(arr(10)) ! Dynamically allocate an array of size 10 arr = (/1, 2, 3, 4, 5, 6, 7, 8, 9, 10/)- ফোরট্রান-এ অ্যারে ডাইনামিক হতে পারে, যার আকার প্রোগ্রাম চলাকালীন সময় পরিবর্তিত হতে পারে। এটি
৫. কার্যকারিতা
স্ট্রিং:
- স্ট্রিং শুধুমাত্র ক্যারেক্টার ডেটা ধারণ করতে পারে, যা একটি নির্দিষ্ট দৈর্ঘ্যে থাকে এবং এটিতে ক্যারেক্টারের ওপর অপারেশন চালানো যায়, যেমন স্ট্রিং কনক্যাটেনেশন বা সাবস্ট্রিং এক্সট্রাকশন।
উদাহরণ:
character(len=10) :: str1, str2 str1 = "Hello" str2 = "World" str1 = trim(adjustl(str1)) // " " // trim(adjustl(str2)) print *, str1 ! Output: "Hello World"অ্যারে:
- অ্যারে একাধিক ডেটা টাইপ ধারণ করতে পারে এবং এর মানের ওপর গাণিতিক অপারেশন করা যেতে পারে (যেমন অ্যারে যোগ, গুণ)।
উদাহরণ:
integer, dimension(5) :: arr1, arr2, result arr1 = (/1, 2, 3, 4, 5/) arr2 = (/5, 4, 3, 2, 1/) result = arr1 + arr2 ! Array addition
৬. প্রধান পার্থক্যগুলো সংক্ষেপে
| বৈশিষ্ট্য | স্ট্রিং (String) | অ্যারে (Array) |
|---|---|---|
| ডেটা টাইপ | ক্যারেক্টার টাইপ | একাধিক ডেটা টাইপ হতে পারে |
| ইনডেক্সিং | ১-ভিত্তিক ইনডেক্সিং | ১-ভিত্তিক বা ০-ভিত্তিক ইনডেক্সিং |
| ব্যবহার | টেক্সট বা চরিত্র ধারণ | একাধিক সংখ্যামূলক বা অন্য ধরনের ডেটা |
| ডাইনামিক | সাধারণত স্থির দৈর্ঘ্য | ডাইনামিক আকার হতে পারে (allocate) |
| কার্যকারিতা | টেক্সট ম্যানিপুলেশন (কনক্যাটেনেশন, সাবস্ট্রিং) | গাণিতিক অপারেশন (যোগ, গুণ, বিভাজন) |
উপসংহার
স্ট্রিং এবং অ্যারে ফোরট্রান প্রোগ্রামিংয়ে ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। স্ট্রিং মূলত ক্যারেক্টার ডেটার জন্য ব্যবহৃত হয়, যেখানে অ্যারে সাধারণত সংখ্যা বা একাধিক ডেটা টাইপের উপাদান ধারণ করতে ব্যবহৃত হয়। অ্যারে সাধারণত গাণিতিক বা লজিক্যাল অপারেশনের জন্য ব্যবহৃত হয়, আর স্ট্রিং সাধারণত টেক্সট ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
Read more