ফাইল ইনপুট/আউটপুট ফোরট্রানে (File Handling in Fortran)
ফোরট্রানে ফাইল ইনপুট/আউটপুট (I/O) একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা প্রোগ্রাম থেকে ডেটা ফাইলের মধ্যে সংরক্ষণ বা ফাইল থেকে ডেটা পড়তে ব্যবহৃত হয়। ফাইল অপারেশনে মূলত তিনটি অংশ থাকে: ফাইল খোলা, ফাইল থেকে পড়া বা লেখা, এবং ফাইল বন্ধ করা।
১. ফাইল খোলা (Opening a File)
ফোরট্রানে open স্টেটমেন্ট ব্যবহার করে ফাইল খোলা হয়। এর মাধ্যমে ফাইলের নাম, অ্যাক্সেস মোড এবং অন্যান্য গুণাবলী নির্ধারণ করা যায়।
open(unit=10, file="data.txt", status="unknown")উপরে, unit=10 ফাইলটি একটি ইউনিট নম্বর (পরিচিতি নম্বর) দিয়ে সংযুক্ত করা হয়েছে। file এ ফাইলের নাম এবং status এ ফাইলটি নতুন বা পুরনো কিনা তা নির্ধারণ করা হয়।
| Status অপশন | বর্ণনা |
|---|---|
old | ফাইলটি আগে থেকেই আছে |
new | নতুন ফাইল তৈরি করতে |
replace | পুরোনো ফাইল সরিয়ে নতুন তৈরি |
unknown | ফাইলটি আছে কিনা তা নির্ধারণ নয় |
২. ফাইল লেখা (Writing to a File)
ফোরট্রানে write স্টেটমেন্ট ব্যবহার করে ফাইলে ডেটা লেখা হয়।
open(unit=10, file="output.txt", status="replace")
write(10, *) "Hello, Fortran!"
write(10, *) "This is a file output example."
close(10)এখানে, output.txt ফাইলে "Hello, Fortran!" এবং "This is a file output example." লেখা হবে এবং শেষে close দিয়ে ফাইলটি বন্ধ করা হয়েছে।
৩. ফাইল থেকে পড়া (Reading from a File)
ফোরট্রানে read স্টেটমেন্ট ব্যবহার করে ফাইল থেকে ডেটা পড়া যায়।
integer :: num
open(unit=20, file="input.txt", status="old")
read(20, *) num
close(20)এখানে, input.txt ফাইল থেকে num ভেরিয়েবলে ডেটা পড়া হবে। status="old" নির্দেশ করে যে input.txt আগে থেকেই থাকতে হবে।
৪. ফাইল বন্ধ করা (Closing a File)
ফোরট্রানে ফাইল ব্যবহারের পরে close স্টেটমেন্ট ব্যবহার করে ফাইলটি বন্ধ করতে হয়। এটি ফাইলের সমস্ত ডেটা সংরক্ষণ করে এবং ইউনিট নম্বর মুক্ত করে।
close(unit=10)৫. ফরম্যাটেড এবং আনফরম্যাটেড ইনপুট/আউটপুট
ফোরট্রানে ফরম্যাটেড এবং আনফরম্যাটেড ডেটা ইনপুট/আউটপুট এর জন্য আলাদা কৌশল ব্যবহৃত হয়।
ফরম্যাটেড আউটপুট
open(unit=10, file="formatted_output.txt", status="replace")
write(10, '(A, I3)') "Value: ", 123
close(10)এখানে (A, I3) ফরম্যাটটি ব্যবহার করা হয়েছে যেখানে A স্ট্রিং এবং I3 পূর্ণসংখ্যা 123 সংরক্ষণ করে।
আনফরম্যাটেড আউটপুট
আনফরম্যাটেড ফাইল আউটপুটে ডেটা সাধারণত বাইনারি ফর্মে সংরক্ষিত হয়, যা দ্রুত পড়া এবং লেখা সম্ভব।
open(unit=10, file="unformatted_output.dat", form="unformatted", status="replace")
write(10) 123
close(10)৬. ফাইল পজিশনিং (File Positioning)
ফোরট্রানে rewind এবং backspace ব্যবহার করে ফাইলের পজিশন পরিবর্তন করা যায়।
rewind: ফাইলের শুরুতে ফিরে যায়।
rewind(10)backspace: ফাইলের এক ধাপ পেছনে ফিরে যায়।
backspace(10)
৭. ফাইল এন্ড-অফ-ফাইল চেক (End-of-File Check)
ফাইল থেকে পড়ার সময় এন্ড-অফ-ফাইল (EOF) চেক করা যেতে পারে। iostat প্যারামিটার ব্যবহার করে EOF নির্ধারণ করা যায়।
integer :: num, status
open(unit=10, file="data.txt", status="old")
do
read(10, *, iostat=status) num
if (status /= 0) exit
print *, num
end do
close(10)এখানে, status /= 0 EOF নির্দেশ করলে লুপ বন্ধ হয়ে যাবে।
উদাহরণ: ফাইল থেকে ডেটা পড়া এবং লেখা
program file_example
integer :: num, sum, status
sum = 0
! ফাইল থেকে ডেটা পড়া
open(unit=10, file="numbers.txt", status="old")
do
read(10, *, iostat=status) num
if (status /= 0) exit
sum = sum + num
end do
close(10)
! ফাইলে ডেটা লেখা
open(unit=20, file="result.txt", status="replace")
write(20, *) "Sum of numbers:", sum
close(20)
end program file_exampleএই উদাহরণে, numbers.txt ফাইল থেকে সংখ্যা পড়া হয়েছে এবং তাদের যোগফল result.txt ফাইলে লেখা হয়েছে।
উপসংহার
ফোরট্রানে ফাইল ইনপুট/আউটপুট ব্যবহার করে প্রোগ্রামে ডেটা সংরক্ষণ এবং পুনরায় ব্যবহার করা সহজ হয়। ফাইল থেকে ডেটা পড়া, লেখা, এবং ম্যানিপুলেশন করতে open, write, read, এবং close স্টেটমেন্টগুলো ব্যবহার করা হয়।
ফোরট্রানে ফাইল খুলা এবং বন্ধ করা
ফোরট্রানে ফাইলের সঙ্গে কাজ করার জন্য OPEN এবং CLOSE স্টেটমেন্ট ব্যবহার করা হয়। ফাইল খুলে, তার মধ্যে ডেটা লেখা বা পড়া যায় এবং শেষে ফাইলটি বন্ধ করা হয়। ফাইলের মাধ্যমে ডেটা আউটপুট বা ইনপুট করা একটি সাধারণ কাজ।
১. ফাইল খোলা (OPEN)
ফোরট্রানে একটি ফাইল খোলার জন্য OPEN স্টেটমেন্ট ব্যবহার করা হয়। এই স্টেটমেন্টের মাধ্যমে আপনি ফাইলের নাম, মোড (যেমন, পড়া, লেখা), এবং ফাইলটি খোলার জন্য অন্যান্য নির্দিষ্ট প্যারামিটার নির্ধারণ করতে পারেন।
সিনট্যাক্স:
OPEN(UNIT=<unit_number>, FILE='<filename>', STATUS='<status>', ACCESS='<access_type>')- UNIT: ফাইলটি যেটি অ্যাক্সেস করতে চান তার জন্য একটি ইউনিট নম্বর নির্ধারণ করুন। এটা একটি আইডেন্টিফায়ার হিসেবে কাজ করে।
- FILE: ফাইলের নাম এবং পাথ।
- STATUS: ফাইলের স্ট্যাটাস, যেমন
NEW,OLD,REPLACE,UNKNOWNইত্যাদি। - ACCESS: ফাইলের অ্যাক্সেস মোড, যেমন
READ,WRITE, বাREADWRITE।
উদাহরণ:
PROGRAM open_file_example
INTEGER :: unit
CHARACTER(LEN=20) :: filename
filename = 'data.txt'
OPEN(UNIT=10, FILE=filename, STATUS='UNKNOWN', ACCESS='WRITE')
PRINT *, 'File opened for writing.'
CLOSE(UNIT=10)
END PROGRAM open_file_exampleএখানে:
UNIT=10ফাইলের জন্য একটি ইউনিট নম্বর।FILE='data.txt'ফাইলের নাম।STATUS='UNKNOWN'ফাইলটি নতুন বা পুরানো হতে পারে, তাই এটি চেক করা হবে।ACCESS='WRITE'ফাইলটি লেখার জন্য খোলা হচ্ছে।
২. ফাইল থেকে ডেটা পড়া (READ)
ফোরট্রানে ফাইল থেকে ডেটা পড়তে READ স্টেটমেন্ট ব্যবহার করা হয়।
উদাহরণ:
PROGRAM read_file_example
INTEGER :: unit
CHARACTER(LEN=20) :: line
OPEN(UNIT=10, FILE='data.txt', STATUS='OLD', ACCESS='READ')
! ফাইল থেকে এক লাইন পড়া
READ(10, *) line
PRINT *, 'Data from file: ', line
CLOSE(UNIT=10)
END PROGRAM read_file_exampleএখানে:
READ(10, *) lineফাইল থেকেlineনামক ভেরিয়েবলে ডেটা পড়ে।
৩. ফাইল লেখা (WRITE)
ফোরট্রানে ফাইলের মধ্যে ডেটা লেখার জন্য WRITE স্টেটমেন্ট ব্যবহার করা হয়।
উদাহরণ:
PROGRAM write_file_example
INTEGER :: unit
CHARACTER(LEN=20) :: name
OPEN(UNIT=10, FILE='output.txt', STATUS='REPLACE', ACCESS='WRITE')
name = 'John Doe'
WRITE(10, *) name ! 'output.txt' ফাইলে নাম লিখা
CLOSE(UNIT=10)
END PROGRAM write_file_exampleএখানে:
WRITE(10, *) nameফাইলেnameভেরিয়েবলের মান লেখা হয়েছে।
৪. ফাইল বন্ধ করা (CLOSE)
ফাইল ব্যবহারের পর সেটি বন্ধ করতে CLOSE স্টেটমেন্ট ব্যবহার করা হয়।
সিনট্যাক্স:
CLOSE(UNIT=<unit_number>)উদাহরণ:
PROGRAM close_file_example
INTEGER :: unit
CHARACTER(LEN=20) :: filename
filename = 'data.txt'
OPEN(UNIT=10, FILE=filename, STATUS='UNKNOWN', ACCESS='READWRITE')
! ফাইলের মধ্যে ডেটা পড়া বা লেখা
CLOSE(UNIT=10) ! ফাইল বন্ধ করা
PRINT *, 'File is closed.'
END PROGRAM close_file_exampleএখানে:
CLOSE(UNIT=10)স্টেটমেন্ট ফাইলটি বন্ধ করে।
৫. ফাইল মোড (File Modes)
ফোরট্রানে ফাইলের জন্য বিভিন্ন মোড ব্যবহার করা যায়, যেমন:
- STATUS:
NEW: নতুন ফাইল তৈরি করবে।OLD: পুরানো ফাইল খুলবে।REPLACE: পুরানো ফাইলের উপরে নতুন ফাইল লেখবে।UNKNOWN: ফাইলটি যদি উপস্থিত থাকে তবে খুলবে, অন্যথায় নতুন তৈরি করবে।
- ACCESS:
READ: শুধুমাত্র পড়ার জন্য।WRITE: শুধুমাত্র লেখার জন্য।READWRITE: পড়া এবং লেখা উভয়ের জন্য।
উপসংহার
ফোরট্রানে ফাইল ব্যবস্থাপনার জন্য OPEN, READ, WRITE, এবং CLOSE স্টেটমেন্টগুলি ব্যবহার করা হয়। এগুলির মাধ্যমে আপনি ফাইল খুলতে, পড়তে, লেখাতে এবং শেষে বন্ধ করতে পারবেন। এটি ফাইল সিস্টেমের সঙ্গে যোগাযোগ করার জন্য খুবই কার্যকরী এবং সহজ।
ফোরট্রানে File Read/Write Operations (OPEN, READ, WRITE, CLOSE)
ফোরট্রানে ফাইল অপারেশনগুলি খুবই গুরুত্বপূর্ণ, কারণ এটি ডেটা সংরক্ষণ, পড়া এবং লেখার সুবিধা প্রদান করে। ফোরট্রান ফাইল অপারেশনের জন্য বিভিন্ন স্টেটমেন্ট প্রদান করে, যেমন OPEN, READ, WRITE, এবং CLOSE, যা ব্যবহার করে আপনি ফাইলের সাথে কার্যকরভাবে যোগাযোগ করতে পারেন।
এখানে ফোরট্রানে ফাইল অপারেশনের বিভিন্ন পর্যায় এবং এর ব্যবহারের উদাহরণ দেওয়া হয়েছে।
১. OPEN (ফাইল খোলা)
OPEN স্টেটমেন্ট ব্যবহার করে ফাইল খোলা হয়। ফাইলের সাথে কাজ শুরু করার জন্য এটি প্রথমে ব্যবহার করা হয়। ফাইল খোলার সময় আপনাকে ফাইলের নাম, এক্সেস মোড (যেমন, পড়া বা লেখা), এবং অন্যান্য প্যারামিটার নির্ধারণ করতে হবে।
OPEN স্টেটমেন্টের সাধারণ গঠন:
OPEN(unit=unit_number, file='filename', status='status', action='action')unit_number: ফাইলের জন্য ব্যবহৃত একটি ইউনিট নম্বর (integer)।file: ফাইলের নাম।status: ফাইলের স্টেটাস (যেমন,'old','new','unknown')।action: ফাইলের অ্যাক্সেস অ্যাকশন (যেমন,'read','write','readwrite')।
উদাহরণ:
program open_file_example
implicit none
integer :: unit_number
character(len=20) :: file_name
file_name = 'data.txt'
! ফাইল খোলা
open(unit=unit_number, file=file_name, status='unknown', action='write')
print *, 'File opened successfully.'
! ফাইল বন্ধ করা
close(unit_number)
end program open_file_exampleএখানে:
open(unit=unit_number, file=file_name, status='unknown', action='write'): ফাইলটি লেখার জন্য খোলা হয়েছে।- ফাইলটি সফলভাবে খুললে একটি মেসেজ প্রিন্ট করা হবে।
২. READ (ফাইল থেকে পড়া)
READ স্টেটমেন্ট ব্যবহার করে একটি ফাইল থেকে ডেটা পড়া হয়। আপনি ফাইলের নির্দিষ্ট ইউনিট নম্বর ব্যবহার করে ডেটা অ্যাক্সেস করতে পারেন।
READ স্টেটমেন্টের সাধারণ গঠন:
READ(unit=unit_number, fmt=format_specifier) variableunit_number: ইউনিট নম্বর যার মাধ্যমে ফাইল অ্যাক্সেস করা হচ্ছে।fmt: ফরম্যাট স্পেসিফায়ার (যদি প্রয়োজন হয়)।variable: যে ভ্যারিয়েবলটির মধ্যে ডেটা পড়া হবে।
উদাহরণ:
program read_file_example
implicit none
integer :: unit_number
real :: value
character(len=20) :: file_name
file_name = 'data.txt'
! ফাইল খোলা
open(unit=unit_number, file=file_name, status='old', action='read')
! ফাইল থেকে মান পড়া
read(unit_number, *) value
print *, 'Read value from file: ', value
! ফাইল বন্ধ করা
close(unit_number)
end program read_file_exampleএখানে:
read(unit_number, *) value: ফাইল থেকে একটি মান পড়া হচ্ছে এবংvalueভ্যারিয়েবলে সেটি রাখা হচ্ছে।- ফাইল থেকে ডেটা পড়া হলে আউটপুট হবে
Read value from file: <value>।
৩. WRITE (ফাইলে লেখা)
WRITE স্টেটমেন্ট ব্যবহার করে ফাইলে ডেটা লেখা হয়। এটি ফাইলের নির্দিষ্ট ইউনিট নম্বরে ডেটা লিখে।
WRITE স্টেটমেন্টের সাধারণ গঠন:
WRITE(unit=unit_number, fmt=format_specifier) variableunit_number: ইউনিট নম্বর যার মাধ্যমে ফাইল অ্যাক্সেস করা হচ্ছে।fmt: ফরম্যাট স্পেসিফায়ার (যদি প্রয়োজন হয়)।variable: যে ভ্যারিয়েবলটির মান ফাইলে লেখা হবে।
উদাহরণ:
program write_file_example
implicit none
integer :: unit_number
real :: value
character(len=20) :: file_name
file_name = 'data.txt'
value = 25.5
! ফাইল খোলা
open(unit=unit_number, file=file_name, status='replace', action='write')
! ফাইলে মান লেখা
write(unit_number, *) value
print *, 'Value written to file: ', value
! ফাইল বন্ধ করা
close(unit_number)
end program write_file_exampleএখানে:
write(unit_number, *) value:valueমানটি ফাইলে লেখা হচ্ছে।- ফাইলটি
'replace'স্ট্যাটাসে খোলা হয়েছে, অর্থাৎ পুরানো ফাইলটি প্রতিস্থাপিত হবে।
৪. CLOSE (ফাইল বন্ধ করা)
ফাইলের অপারেশন শেষে CLOSE স্টেটমেন্ট ব্যবহার করে ফাইল বন্ধ করা হয়। এটি ফাইলের সমস্ত পরিবর্তন সেভ করার পরে ফাইলটি বন্ধ করে।
CLOSE স্টেটমেন্টের সাধারণ গঠন:
CLOSE(unit=unit_number)unit_number: ফাইলের ইউনিট নম্বর যেটি আপনি পূর্বে ব্যবহার করেছেন।
উদাহরণ:
program close_file_example
implicit none
integer :: unit_number
character(len=20) :: file_name
file_name = 'data.txt'
! ফাইল খোলা
open(unit=unit_number, file=file_name, status='replace', action='write')
! ফাইলে কিছু লেখা
write(unit_number, *) 'Hello, Fortran!'
! ফাইল বন্ধ করা
close(unit_number)
print *, 'File closed successfully.'
end program close_file_exampleএখানে:
- ফাইল খোলার পর
close(unit_number)ব্যবহার করে ফাইল বন্ধ করা হয়েছে।
উপসংহার
ফোরট্রানে ফাইল অপারেশনগুলি কার্যকরভাবে ব্যবহারের জন্য OPEN, READ, WRITE, এবং CLOSE স্টেটমেন্ট ব্যবহার করা হয়। এগুলি ফাইলের সাথে ডেটা পাঠানো, পড়া এবং ফাইল বন্ধ করার জন্য একটি খুব গুরুত্বপূর্ণ টুল। এই স্টেটমেন্টগুলি সঠিকভাবে ব্যবহার করলে আপনি সহজেই ফাইলের মধ্যে ডেটা পরিচালনা করতে পারবেন।
ফোরট্রানে File Status Checking এবং Error Handling
ফোরট্রানে File Status Checking এবং Error Handling গুরুত্বপূর্ণ কনসেপ্ট যা ফাইলের সাথে কাজ করার সময় সঠিকভাবে ত্রুটি পরিচালনা করতে সাহায্য করে। যখন আপনি ফাইলের সাথে তথ্য পড়ছেন বা লিখছেন, তখন নানা ধরনের ত্রুটি হতে পারে (যেমন ফাইল খোলা না যেতে পারে, অনুমতি নেই, ফাইলের শেষ পর্যন্ত পৌঁছানো, ইত্যাদি)। এই ত্রুটিগুলি সঠিকভাবে চিহ্নিত এবং পরিচালনা করতে File Status Checking এবং Error Handling ব্যবহৃত হয়।
ফোরট্রানে File Status Checking সাধারণত IOSTAT এবং IOMSG এর মাধ্যমে করা হয়, এবং Error Handling এর জন্য ERR, IOSTAT, এবং IOMSG ব্যবহার করা হয়।
১. File Status Checking (ফাইল স্টেটাস চেকিং)
ফোরট্রানে ফাইল খোলার, পড়ার বা লেখার সময় যেকোনো ত্রুটি বা অবস্থা চেক করার জন্য IOSTAT কিওয়ার্ড ব্যবহৃত হয়। এটি ইনপুট/আউটপুট অপারেশনগুলি সম্পাদন করার সময় ত্রুটি ঘটলে একটি স্ট্যাটাস কোড প্রদান করে।
উদাহরণ: IOSTAT ব্যবহার
program file_status_check
integer :: iunit, ios
character(len=20) :: filename
filename = "data.txt"
open(unit=iunit, file=filename, status='old', iostat=ios)
if (ios /= 0) then
print *, 'Error opening file ', filename
print *, 'IO error code: ', ios
else
print *, 'File opened successfully.'
! ফাইল পড়ার বা লেখার কোড এখানে থাকবে
close(iunit)
end if
end program file_status_checkব্যাখ্যা:
openকমান্ডের সাথেiostat=iosব্যবহার করা হয়েছে, যাতে ফাইল খোলার সময় কোনো ত্রুটি ঘটলে ios পরিবর্তিত হবে।- যদি ios /= 0 (অর্থাৎ ত্রুটি থাকে), তবে ত্রুটির বার্তা প্রদর্শন করা হবে।
IOSTAT এর মানের কিছু উদাহরণ:
0: অপারেশন সফলভাবে সম্পন্ন হয়েছে।1: ফাইলের নাম বা অবস্থান ভুল।2: ফাইলটি খোলা যায়নি (অথবা অনুমতি নেই)।
২. Error Handling (ত্রুটি পরিচালনা)
ফোরট্রানে Error Handling সাধারণত ERR, IOSTAT, এবং IOMSG ব্যবহার করে করা হয়। ERR কিওয়ার্ডটি কোনও ত্রুটি ঘটলে এক্সিকিউশন থামাতে সাহায্য করে, আর IOMSG ত্রুটির বিবরণ প্রদান করে।
উদাহরণ: ERR এবং IOMSG ব্যবহার
program error_handling_example
integer :: iunit, ios
character(len=20) :: filename
character(len=100) :: errmsg
filename = "data.txt"
open(unit=iunit, file=filename, status='old', iostat=ios, iomsg=errmsg, err=99)
! ফাইল পড়া বা লেখার কোড এখানে
close(iunit)
return
99 ! ত্রুটি হলে এখানে চলে আসবে
print *, 'Error occurred while handling the file.'
print *, 'Error message: ', errmsg
stop ! প্রোগ্রাম বন্ধ হবে
end program error_handling_exampleব্যাখ্যা:
- এখানে open কমান্ডের সাথে iomsg=errmsg ব্যবহার করা হয়েছে, যাতে ত্রুটির বিবরণ পাওয়া যায়।
- err=99: যদি কোন ত্রুটি ঘটে, তাহলে প্রোগ্রামটি লেবেল
99এ চলে যাবে এবং সেখানে ত্রুটির বার্তা প্রদর্শন করা হবে।
IOMSG এবং ERR কিওয়ার্ড:
- IOMSG: এটি ত্রুটির বিস্তারিত বার্তা সংরক্ষণ করে, যা open, read, write ইত্যাদি ইনপুট/আউটপুট অপারেশনগুলির সাথে ব্যবহৃত হয়।
- ERR: এটি ত্রুটির ঘটনার পরে নির্দিষ্ট লেবেলে প্রোগ্রামটি পাঠায়, যেখানে ত্রুটির কার্যক্রম পরিচালনা করা হয়।
৩. File Status Checking এবং Error Handling এর সাধারণ ফাংশন
- open: ফাইল খোলার সময় IOSTAT এবং IOMSG ব্যবহার করে ত্রুটি চেক করা।
- read: ফাইল থেকে ডেটা পড়ার সময় IOSTAT এবং IOMSG দিয়ে ত্রুটি চেক করা।
- write: ফাইল লেখার সময় IOSTAT এবং IOMSG দিয়ে ত্রুটি চেক করা।
- close: ফাইল বন্ধ করার সময় ত্রুটি চেক করা।
উদাহরণ: read ও write এর মাধ্যমে Error Handling
program file_read_write
integer :: iunit, ios
character(len=20) :: filename
real :: num
filename = "data.txt"
open(unit=iunit, file=filename, status='old', iostat=ios)
if (ios /= 0) then
print *, 'Error opening file.'
stop
end if
! ফাইল থেকে একটি রিয়েল নম্বর পড়া
read(iunit, *, iostat=ios) num
if (ios /= 0) then
print *, 'Error reading from file.'
close(iunit)
stop
end if
! ফাইল লেখার অংশ
write(iunit, *) num
close(iunit)
end program file_read_writeব্যাখ্যা:
- এই প্রোগ্রামে read এবং write অপারেশন করার সময় IOSTAT দিয়ে ত্রুটি চেক করা হয়েছে। যদি ios /= 0 হয়, তাহলে ত্রুটি বার্তা দেখিয়ে প্রোগ্রাম থেমে যাবে।
উপসংহার
File Status Checking এবং Error Handling ফোরট্রানে ফাইল পরিচালনার ক্ষেত্রে গুরুত্বপূর্ণ। IOSTAT এবং IOMSG ফাংশনগুলির মাধ্যমে ফাইল অপারেশনগুলি সফলভাবে পরিচালিত হয়, এবং ERR কিওয়ার্ড ব্যবহার করে ত্রুটি পরিস্থিতিতে কোডের কার্যক্রম নিয়ন্ত্রণ করা হয়। এই ফাংশনগুলির মাধ্যমে আপনি সঠিকভাবে ত্রুটির মোকাবিলা করতে পারেন এবং আপনার প্রোগ্রামটি আরও শক্তিশালী ও নির্ভুল করে তুলতে পারেন।
ফরম্যাটেড এবং আনফরম্যাটেড ইনপুট/আউটপুট (Formatted and Unformatted Input/Output in Fortran)
ফোরট্রান প্রোগ্রামিংয়ে ইনপুট এবং আউটপুট পরিচালনা করার জন্য দুটি প্রধান পদ্ধতি রয়েছে: ফরম্যাটেড এবং আনফরম্যাটেড ইনপুট/আউটপুট। এই দুটি পদ্ধতির মধ্যে প্রধান পার্থক্য হলো আউটপুট বা ইনপুটের ডেটা ফরম্যাট কিভাবে পরিচালিত হয়।
১. ফরম্যাটেড ইনপুট/আউটপুট (Formatted Input/Output)
ফরম্যাটেড ইনপুট এবং আউটপুটের মাধ্যমে ডেটা নির্দিষ্ট ফরম্যাটে প্রিন্ট করা হয় বা গ্রহণ করা হয়। এটি সাধারণত টেক্সট ডেটা বা সংখ্যার আউটপুটের সময় ব্যবহৃত হয়, যেখানে ডেটা একটি নির্দিষ্ট ফরম্যাটে প্রিন্ট বা ইনপুট করতে হয়।
ফরম্যাটেড আউটপুট
ফরম্যাটেড আউটপুটের জন্য write অথবা print স্টেটমেন্ট ব্যবহার করা হয়, যেখানে একটি ফরম্যাট (format) নির্ধারণ করা হয়। ফরম্যাট কন্ট্রোল করে কিভাবে ডেটা আউটপুট হবে (যেমন, সংখ্যা কত দশমিক স্থান পর্যন্ত দেখানো হবে, সংখ্যা কোনভাবে সাজানো হবে ইত্যাদি)।
উদাহরণ (ফরম্যাটেড আউটপুট):
program formatted_output
real :: num1, num2
num1 = 3.14159
num2 = 1234.5678
print *, "Formatted Output:"
print '(F10.3)', num1 ! আউটপুট হবে: 3.142
print '(F10.2)', num2 ! আউটপুট হবে: 1234.57
end program formatted_outputএখানে:
F10.3: ফ্লোটিং পয়েন্ট নম্বর ১০টি স্থান নিয়ে ৩টি দশমিক স্থান সহ প্রিন্ট হবে।F10.2: ফ্লোটিং পয়েন্ট নম্বর ১০টি স্থান নিয়ে ২টি দশমিক স্থান সহ প্রিন্ট হবে।
ফরম্যাটেড ইনপুট
ফরম্যাটেড ইনপুটের জন্য read স্টেটমেন্ট ব্যবহৃত হয়। ইনপুট ডেটার ফরম্যাট স্পেসিফাই করা হয় এবং সেই অনুযায়ী ইনপুট গ্রহণ করা হয়।
উদাহরণ (ফরম্যাটেড ইনপুট):
program formatted_input
real :: num1, num2
print *, "Enter a floating point number:"
read '(F10.3)', num1
print *, "Enter another floating point number:"
read '(F10.2)', num2
print *, "You entered:", num1, "and", num2
end program formatted_inputএখানে:
'(F10.3)': ডেটা ইনপুট করার সময় এটি দশমিকের পর ৩টি স্থান সহ ফ্লোটিং পয়েন্ট সংখ্যার জন্য ১০টি স্থান নির্ধারণ করে।
২. আনফরম্যাটেড ইনপুট/আউটপুট (Unformatted Input/Output)
আনফরম্যাটেড ইনপুট এবং আউটপুটে ডেটা কোন নির্দিষ্ট ফরম্যাট ছাড়াই পড়া বা লেখা হয়। এতে ডেটার সঠিক ফরম্যাটের কোনো নিয়ম থাকে না, অর্থাৎ ডেটা সরাসরি বাইনারি ফরম্যাটে ইনপুট বা আউটপুট হয়, যা দ্রুত এবং কম মেমরি ব্যবহারের জন্য উপযোগী।
আনফরম্যাটেড আউটপুট
আনফরম্যাটেড আউটপুটের জন্য write স্টেটমেন্ট ব্যবহার করা হয়, যেখানে unit এবং form='unformatted' অপশনটি ব্যবহার করা হয়। এটি ডেটাকে বাইনারি ফরম্যাটে লিখে।
উদাহরণ (আনফরম্যাটেড আউটপুট):
program unformatted_output
real :: num1, num2
num1 = 3.14159
num2 = 1234.5678
open(unit=10, file='output.dat', form='unformatted')
write(10) num1, num2
close(10)
end program unformatted_outputএখানে:
form='unformatted': এটি ডেটাকে আনফরম্যাটেড (বাইনারি) আউটপুট ফরম্যাটে লেখে।
আনফরম্যাটেড ইনপুট
আনফরম্যাটেড ইনপুটে read স্টেটমেন্ট ব্যবহার করা হয়, যেখানে form='unformatted' অপশনটি ব্যবহার করা হয়। এটি ডেটা বাইনারি ফরম্যাটে পড়ে।
উদাহরণ (আনফরম্যাটেড ইনপুট):
program unformatted_input
real :: num1, num2
open(unit=10, file='output.dat', form='unformatted')
read(10) num1, num2
print *, "You entered:", num1, "and", num2
close(10)
end program unformatted_inputএখানে:
form='unformatted': এটি বাইনারি ফরম্যাটে ইনপুট ডেটা পড়ে।
৩. ফরম্যাটেড এবং আনফরম্যাটেড আউটপুটের পার্থক্য
| বৈশিষ্ট্য | ফরম্যাটেড ইনপুট/আউটপুট (Formatted I/O) | আনফরম্যাটেড ইনপুট/আউটপুট (Unformatted I/O) |
|---|---|---|
| ফরম্যাট | নির্দিষ্ট ফরম্যাট অনুযায়ী ডেটা আউটপুট বা ইনপুট হয় | কোনো নির্দিষ্ট ফরম্যাট ছাড়াই ডেটা পড়া বা লেখা হয় |
| গতি | তুলনামূলকভাবে ধীর (ফরম্যাটিং করার জন্য বেশি সময় লাগে) | দ্রুত, কারণ ফরম্যাটিং ছাড়াই ডেটা সরাসরি লেখা বা পড়া হয় |
| মেমরি ব্যবহার | বেশি, কারণ ফরম্যাটের জন্য অতিরিক্ত স্থান প্রয়োজন | কম মেমরি ব্যবহার হয় কারণ বাইনারি ফরম্যাটে ডেটা সংরক্ষিত হয় |
| ব্যবহার | যখন ডেটা একটি নির্দিষ্ট ফরম্যাটে আউটপুট বা ইনপুট করতে হয় | যখন বাইনারি ফরম্যাটে দ্রুত ডেটা পড়া বা লেখা প্রয়োজন |
উপসংহার
ফোরট্রান-এ ফরম্যাটেড ইনপুট/আউটপুট ডেটা প্রদর্শন বা ইনপুট করার সময় নির্দিষ্ট ফরম্যাট নিশ্চিত করে, যখন আনফরম্যাটেড ইনপুট/আউটপুট দ্রুত এবং কম মেমরি ব্যবহারের জন্য ব্যবহৃত হয়, যেখানে ফরম্যাটের প্রয়োজন নেই। প্রতিটি পদ্ধতি নির্দিষ্ট প্রয়োজনীয়তার জন্য উপযুক্ত, এবং প্রোগ্রামিংয়ে সঠিক পদ্ধতি নির্বাচন করা গুরুত্বপূর্ণ।
Read more