Input এবং Output Handling (ইনপুট এবং আউটপুট হ্যান্ডলিং)

প্রোলগ প্রোগ্রামিং (Prolog Programming) - Computer Programming

339

প্রোলগ (Prolog) একটি লজিক্যাল প্রোগ্রামিং ভাষা যা বিশেষভাবে সিদ্ধান্ত গ্রহণের জন্য ব্যবহৃত হয়। প্রোলগের মধ্যে ইনপুট (input) এবং আউটপুট (output) হ্যান্ডলিং সাধারণত স্ট্যান্ডার্ড ইনপুট/আউটপুট এবং ফাইলের মাধ্যমে করা হয়। প্রোলগে ইনপুট নেওয়া এবং আউটপুট দেওয়ার জন্য কিছু বিশেষ প্রেডিকেট এবং অপারেটর রয়েছে। নিচে ইনপুট এবং আউটপুট হ্যান্ডলিং সম্পর্কিত বিভিন্ন বিষয় আলোচনা করা হবে।


১. স্ট্যান্ডার্ড ইনপুট এবং আউটপুট

প্রোলগে স্ট্যান্ডার্ড ইনপুট এবং স্ট্যান্ডার্ড আউটপুট এর মাধ্যমে ব্যবহারকারী থেকে তথ্য নেওয়া এবং ফলাফল দেখানো হয়। এই প্রক্রিয়া সাধারণত কনসোল বা টার্মিনাল ব্যবহার করে পরিচালিত হয়। প্রোলগে ইনপুট এবং আউটপুট সাধারণত write/1 এবং read/1 প্রেডিকেটসের মাধ্যমে করা হয়।

১.১ write/1 – আউটপুট প্রদান

write/1 প্রেডিকেট ব্যবহার করে প্রোলগ কনসোলে কোনো তথ্য প্রিন্ট করতে পারে। এটি একটি আর্গুমেন্ট নেয় এবং সেটিকে আউটপুট হিসেবে প্রিন্ট করে।

উদাহরণ:

?- write('Hello, World!').

ফলাফল:

Hello, World!

এখানে, write('Hello, World!') প্রেডিকেট ব্যবহার করে 'Hello, World!' আউটপুট হিসেবে প্রিন্ট করা হয়েছে।

১.২ nl/0 – নতুন লাইন

nl/0 প্রেডিকেট ব্যবহার করে একটি নতুন লাইন (newline) আউটপুটে যোগ করা হয়।

উদাহরণ:

?- write('Hello'), nl, write('World').

ফলাফল:

Hello
World

এখানে, প্রথমে 'Hello' প্রিন্ট হবে, তারপর একটি নতুন লাইন যোগ হবে, এবং শেষে 'World' প্রিন্ট হবে।

১.৩ read/1 – ইনপুট গ্রহণ

read/1 প্রেডিকেট ব্যবহার করে প্রোলগ একটি মান বা এক্সপ্রেশন ব্যবহারকারী থেকে ইনপুট হিসেবে গ্রহণ করে। এটি সাধারণত এ্যাটম, নাম্বার বা লিস্ট আকারে ইনপুট গ্রহণ করে।

উদাহরণ:

?- write('Enter a number: '), read(X), write(X).

এখানে, প্রোলগ ব্যবহারকারীর কাছ থেকে একটি সংখ্যা ইনপুট নেবে এবং সেটি X তে সংরক্ষণ করবে। তারপর, write(X) এর মাধ্যমে সেই সংখ্যাটি আউটপুট করবে।


২. ফাইল হ্যান্ডলিং (File Handling)

প্রোলগে ফাইলের মাধ্যমে ইনপুট এবং আউটপুট পরিচালনা করতে open/3, read/2, write/2, এবং close/1 প্রেডিকেটস ব্যবহৃত হয়।

২.১ ফাইল ওপেন (Opening a File)

ফাইল খোলার জন্য open/3 প্রেডিকেট ব্যবহার করা হয়। এটি একটি ফাইলকে পড়ার জন্য বা লেখার জন্য খুলতে সাহায্য করে।

সিনট্যাক্স:

open(FileName, Mode, Stream)
  • FileName: ফাইলের নাম।
  • Mode: read (পড়ার জন্য), write (লেখার জন্য), বা append (ফাইলের শেষে যোগ করার জন্য)।
  • Stream: একটি স্ট্রিম তৈরি হয়, যা ফাইলের সাথে কাজ করতে ব্যবহৃত হবে।

উদাহরণ:

?- open('myfile.txt', write, Stream).

এটি myfile.txt ফাইলটি লেখার জন্য খোলবে এবং ফাইলের স্ট্রিমটি Stream এ সংরক্ষণ করবে।

২.২ ফাইলে লেখা (Writing to a File)

ফাইলের মধ্যে লেখা write/2 প্রেডিকেটের মাধ্যমে করা হয়। প্রথমে ফাইল খোলার পর, write/2 প্রেডিকেট ব্যবহার করে তথ্য ফাইলে লেখা হয়।

উদাহরণ:

?- open('myfile.txt', write, Stream),
   write(Stream, 'Hello, World!'),
   close(Stream).

এখানে:

  • ফাইল myfile.txt লেখার জন্য খোলা হয়,
  • তারপর ফাইলে 'Hello, World!' লেখা হয়,
  • এবং শেষে close/1 প্রেডিকেট ব্যবহার করে ফাইল বন্ধ করা হয়।

২.৩ ফাইল থেকে পড়া (Reading from a File)

ফাইল থেকে ডেটা পড়তে read/2 প্রেডিকেট ব্যবহার করা হয়। এটি ফাইলের স্ট্রিম থেকে ডেটা পড়ে একটি ভেরিয়েবল এ সংরক্ষণ করে।

উদাহরণ:

?- open('myfile.txt', read, Stream),
   read(Stream, X),
   write(X),
   close(Stream).

এখানে:

  • open/3 প্রেডিকেট দিয়ে myfile.txt ফাইলটি পড়ার জন্য খোলা হয়,
  • তারপর read(Stream, X) প্রেডিকেটের মাধ্যমে ফাইল থেকে ডেটা পড়া হয় এবং তা X তে সংরক্ষণ করা হয়,
  • শেষে write(X) প্রেডিকেট ব্যবহার করে পড়া ডেটা আউটপুট করা হয়,
  • এবং close/1 দিয়ে ফাইলটি বন্ধ করা হয়।

৩. স্ট্রিং হ্যান্ডলিং (String Handling)

প্রোলগে স্ট্রিং হ্যান্ডলিং করার জন্য স্ট্রিংগুলিকে সাধারণত এ্যাটমস এবং লিস্টস হিসেবে ব্যবহার করা হয়। স্ট্রিংয়ের সাথে কাজ করতে string/1, string_concat/3, string_length/2 ইত্যাদি ফাংশন ব্যবহার করা হয়।

৩.১ স্ট্রিংয়ের দৈর্ঘ্য (Length of a String)

স্ট্রিংয়ের দৈর্ঘ্য বের করতে string_length/2 প্রেডিকেট ব্যবহার করা হয়।

উদাহরণ:

?- string_length('Hello', Length).

ফলাফল:

Length = 5.

এখানে 'Hello' স্ট্রিংয়ের দৈর্ঘ্য ৫।

৩.২ স্ট্রিং কনক্যাটেনেশন (String Concatenation)

স্ট্রিং যোগ করতে string_concat/3 প্রেডিকেট ব্যবহার করা হয়।

উদাহরণ:

?- string_concat('Hello', ' World', Result).

ফলাফল:

Result = 'Hello World'.

এখানে, দুটি স্ট্রিং 'Hello' এবং 'World' যোগ করে 'Hello World' স্ট্রিংটি তৈরি করা হয়েছে।


সারসংক্ষেপ

প্রোলগে ইনপুট এবং আউটপুট হ্যান্ডলিং এর জন্য বেশ কিছু বিল্ট-ইন প্রেডিকেট রয়েছে:

  • write/1 এবং read/1 স্ট্যান্ডার্ড আউটপুট এবং ইনপুটের জন্য ব্যবহৃত হয়।
  • ফাইলের মাধ্যমে ইনপুট এবং আউটপুট করতে open/3, write/2, read/2, close/1 ব্যবহার করা হয়।
  • স্ট্রিং হ্যান্ডলিং এবং ক্যারেক্টার ম্যানিপুলেশন করতে string_length/2, string_concat/3 ইত্যাদি ফাংশন ব্যবহৃত হয়।

এগুলি ব্যবহার করে প্রোলগে ইনপুট এবং আউটপুট পরিচালনা করা খুবই সহজ এবং কার্যকরী।

Content added By

প্রোলগে ইনপুট এবং আউটপুট ফাংশনগুলো মূলত স্ট্যান্ডার্ড ইনপুট (keyboard input) এবং স্ট্যান্ডার্ড আউটপুট (console output) এর মাধ্যমে তথ্য গ্রহণ ও প্রদানে ব্যবহৃত হয়। প্রোলগে ইনপুট এবং আউটপুট পরিচালনা করার জন্য কিছু নির্দিষ্ট বিল্ট-ইন পেডিকেট রয়েছে, যেমন write/1, read/1, nl/0, flush_output/0, এবং অন্যান্য।


1. write/1 - আউটপুট প্রিন্ট করা

write/1 পেডিকেটটি প্রোলগে কোনো ভ্যালু বা তথ্য আউটপুট (প্রিন্ট) করতে ব্যবহৃত হয়।

ব্যবহার:

write(Term).

এখানে, Term হলো যে কোনো টার্ম, যা আপনি আউটপুট হিসেবে প্রিন্ট করতে চান।

উদাহরণ:

?- write('Hello, World!').

আউটপুট:

Hello, World!

এছাড়া আপনি ভেরিয়েবল বা অন্যান্য এক্সপ্রেশনও আউটপুট করতে পারেন:

?- X = 5, write(X).

আউটপুট:

5

2. nl/0 - নতুন লাইনে আউটপুট

nl/0 পেডিকেটটি একটি নতুন লাইন (newline) প্রিন্ট করতে ব্যবহৃত হয়, যা আউটপুটের পর নতুন লাইনে চলে যেতে সহায়ক।

ব্যবহার:

nl.

উদাহরণ:

?- write('Hello'), nl, write('World').

আউটপুট:

Hello
World

এখানে, nl পেডিকেট ব্যবহার করার ফলে Hello এর পর একটি নতুন লাইন তৈরি হয় এবং তারপরে World প্রিন্ট হয়।


3. read/1 - ইনপুট পড়া

read/1 পেডিকেটটি স্ট্যান্ডার্ড ইনপুট (keyboard) থেকে কোনো তথ্য গ্রহণ করতে ব্যবহৃত হয়। এটি ব্যবহারকারীর থেকে ইনপুট নেয় এবং একটি প্রোলগ টার্ম হিসেবে সেটি পড়ে।

ব্যবহার:

read(Term).

এখানে, Term হলো সেই ভেরিয়েবল যেখানে ইনপুটটি সংরক্ষণ হবে।

উদাহরণ:

?- write('Enter a number: '), read(X), write('You entered: '), write(X).

এটি প্রথমে Enter a number: প্রিন্ট করবে এবং তারপর ব্যবহারকারীর ইনপুট গ্রহণ করবে। উদাহরণস্বরূপ, যদি ব্যবহারকারী 5 ইনপুট দেয়, তবে আউটপুট হবে:

Enter a number: 5
You entered: 5

4. flush_output/0 - আউটপুট ফ্লাশ করা

flush_output/0 পেডিকেটটি সমস্ত আউটপুট ফ্লাশ (output flush) করতে ব্যবহৃত হয়। এটি তখন ব্যবহৃত হয় যখন আপনি নিশ্চিত হতে চান যে আউটপুট কনসোল বা স্ক্রীনে দ্রুত প্রদর্শিত হবে।

ব্যবহার:

flush_output.

উদাহরণ:

?- write('Processing...'), flush_output, sleep(2), write(' Done!').

এখানে, flush_output/0 আউটপুট Processing... স্ক্রীনে দ্রুত প্রিন্ট করবে, এবং তার পর sleep(2) ফাংশন ব্যবহার করা হয়েছে যাতে কিছু সময় (2 সেকেন্ড) পর Done! আউটপুট হয়।


5. get_char/1 - একক ক্যারেক্টার ইনপুট পড়া

get_char/1 পেডিকেটটি ব্যবহারকারী থেকে একটি একের অধিক ক্যারেক্টার ইনপুট হিসাবে গ্রহণ করতে ব্যবহৃত হয়। এটি ব্যবহারকারীর প্রথমে চাপা ক্যারেক্টার গ্রহণ করে এবং সেগুলির উপর ভিত্তি করে প্রোগ্রাম চলমান রাখে।

ব্যবহার:

get_char(Char).

এখানে, Char হল সেই ভেরিয়েবল যেখানে ইনপুটটি সংরক্ষণ করা হবে।

উদাহরণ:

?- write('Press a key: '), get_char(Key), write('You pressed: '), write(Key).

এটি Press a key: প্রিন্ট করবে এবং তারপর ব্যবহারকারী একটি কী চাপলে তার ফলাফল হিসেবে সেই কী প্রদর্শিত হবে।


6. read_line_to_string/2 - পুরো লাইনে স্ট্রিং ইনপুট

read_line_to_string/2 পেডিকেটটি ব্যবহারকারীর থেকে একটি পুরো লাইন ইনপুট হিসেবে নেয় এবং সেটি একটি স্ট্রিং হিসেবে সংরক্ষণ করে।

ব্যবহার:

read_line_to_string(Stream, String).

এখানে, Stream হলো ইনপুট স্ট্রিম (সাধারণত user_input), এবং String হলো সেই ভেরিয়েবল যা ইনপুট স্ট্রিং সংরক্ষণ করবে।

উদাহরণ:

?- write('Enter a line of text: '), read_line_to_string(user_input, Line), write('You entered: '), write(Line).

এটি ব্যবহারকারী থেকে একটি লাইন ইনপুট নেবে এবং সেটি প্রিন্ট করবে।


সারসংক্ষেপ:

প্রোলগে ইনপুট এবং আউটপুট পরিচালনা করার জন্য বেশ কিছু বিল্ট-ইন পেডিকেট রয়েছে। write/1 এবং nl/0 ব্যবহার করে আউটপুট প্রদর্শন করা হয়, এবং read/1 বা get_char/1 ব্যবহার করে ইনপুট নেওয়া হয়। flush_output/0 এবং read_line_to_string/2 পেডিকেটগুলি বিশেষ পরিস্থিতিতে আউটপুট এবং ইনপুট আরও কার্যকরভাবে পরিচালনা করতে সহায়ক।

Content added By

প্রোলগে read, write, এবং nl হলো স্ট্যান্ডার্ড ইনপুট এবং আউটপুট পরিচালনার জন্য ব্যবহৃত প্রধান ফাংশন। এগুলি প্রোগ্রামকে ব্যবহারকারীর কাছ থেকে ইনপুট নিতে এবং ফলাফল প্রদর্শন করতে সাহায্য করে। চলুন, এগুলোর বিস্তারিত আলোচনা করা যাক।


1. read/1

read/1 হলো প্রোলগের একটি বিল্ট-ইন প্রেডিকেট, যা ব্যবহারকারীর কাছ থেকে ইনপুট নেয় এবং সেই ইনপুটটি একটি প্রোলগের term (টার্ম) হিসেবে পড়ে।

  • ব্যবহার: read(X) ব্যবহার করলে, প্রোলগ ব্যবহারকারীর কাছ থেকে ইনপুট নেবে এবং তা X তে সংরক্ষণ করবে।

উদাহরণ:

?- read(X).

এই কোডটি প্রোলগকে ব্যবহারকারীর কাছ থেকে কোনো ইনপুট নিতে বলে এবং ইনপুটটি X তে সংরক্ষণ করবে। ব্যবহারকারী যদি ইনপুট দেয়, যেমন 5, তাহলে আউটপুট হবে:

X = 5.

আরেকটি উদাহরণ:

?- read(Term).

এখানে, Term একটি যেকোনো Prolog term হতে পারে, যেমন সংখ্যার মান, অ্যাটম, লিস্ট, অথবা একটি ফ্যাক্ট/ক্লজ।

ইনপুট:

hello.

আউটপুট:

Term = hello.

read/1 term-based input নেয়, যা অ্যাটম, নম্বর, অথবা অন্যান্য প্রোলগ term হিসেবে হতে পারে।


2. write/1

write/1 প্রোলগের একটি বিল্ট-ইন প্রেডিকেট, যা কনসোল বা আউটপুট স্ক্রীনে কোনো মান লিখতে ব্যবহৃত হয়।

  • ব্যবহার: write(X) ব্যবহৃত হলে, প্রোলগ X এর মান কনসোলে প্রিন্ট করবে।

উদাহরণ:

?- write('Hello, world!').

আউটপুট:

Hello, world!

এটি শুধু string আউটপুটের জন্য নয়, কোনো ভেরিয়েবল বা term এর মানও লিখতে পারে। যেমন:

?- write(5).

আউটপুট:

5

আরেকটি উদাহরণ:

?- X = 10, write(X).

আউটপুট:

10

এখানে X = 10 এর মান write/1 দ্বারা কনসোলে প্রিন্ট করা হয়েছে।


3. nl/0

nl/0 প্রোলগে একটি প্রেডিকেট যা একটি নতুন লাইন (new line) তৈরি করে, অর্থাৎ আউটপুটের পর একটি নতুন লাইন প্রিন্ট করে। এটি মূলত আউটপুটের ফরম্যাটিং এবং আরও পাঠযোগ্যতা তৈরিতে ব্যবহৃত হয়।

  • ব্যবহার: nl ব্যবহৃত হলে, এটি কনসোলে একটি নতুন লাইন প্রিন্ট করবে।

উদাহরণ:

?- write('Hello'), nl, write('World').

আউটপুট:

Hello
World

এখানে, nl/0 প্রথম write/1 এর আউটপুটের পরে একটি নতুন লাইন তৈরি করেছে, তারপর দ্বিতীয় write/1 দ্বারা World প্রিন্ট করা হয়েছে।

আরেকটি উদাহরণ:

?- write('This is line one'), nl, write('This is line two').

আউটপুট:

This is line one
This is line two

এখানে, nl/0 নতুন লাইন তৈরি করে আউটপুটকে সহজে পাঠযোগ্য করেছে।


একসাথে read, write, এবং nl ব্যবহার

আপনি read/1, write/1, এবং nl/0 একসাথে ব্যবহার করে ইন্টারঅ্যাকটিভ প্রোগ্রাম তৈরি করতে পারেন, যা ব্যবহারকারীর ইনপুট নিয়ে এবং তা প্রদর্শন করে।

উদাহরণ:

?- write('Enter a number: '), nl, read(X), write('You entered: '), write(X), nl.

ইনপুট:

5.

আউটপুট:

Enter a number: 
5
You entered: 5

এখানে, প্রথমে write/1 ব্যবহার করা হয়েছে ব্যবহারকারীর কাছ থেকে ইনপুট নিতে, তারপর read/1 দ্বারা ইনপুট নেওয়া হয়েছে এবং তারপর write/1nl/0 ব্যবহার করে ফলাফল দেখানো হয়েছে।


সারসংক্ষেপ:

  • read/1 ব্যবহার করে প্রোগ্রাম ইনপুট নেয় এবং সেটিকে একটি term হিসেবে পড়ে।
  • write/1 ব্যবহার করে প্রোগ্রাম আউটপুট স্ক্রীনে কোন মান লিখে।
  • nl/0 ব্যবহার করে আউটপুটে একটি নতুন লাইন তৈরি করা হয়, যা আউটপুটকে পরিষ্কার এবং পড়তে সহজ করে।

এই প্রেডিকেটগুলো একসাথে ব্যবহৃত হলে প্রোগ্রামটি আরও ইন্টারঅ্যাকটিভ এবং কার্যকরী হতে পারে।

Content added By

প্রোলগে ফাইল হ্যান্ডলিং বা ফাইল থেকে ডেটা পড়া এবং লেখা করার জন্য কিছু বিল্ট-ইন প্রেডিকেট রয়েছে, যা আপনার প্রোগ্রামে ফাইল ম্যানিপুলেশন সহজ করে তোলে। আপনি ফাইলের মধ্যে ডেটা পড়তে, লিখতে, আপডেট করতে এবং ফাইল সংক্রান্ত অন্যান্য কাজগুলো করতে পারেন।

প্রোলগে ফাইল হ্যান্ডলিং এর মৌলিক প্রেডিকেটস:

  1. open/3: একটি ফাইল খুলতে ব্যবহৃত হয়।
  2. read/2: ফাইল থেকে ডেটা পড়তে ব্যবহৃত হয়।
  3. write/2: ফাইলে ডেটা লিখতে ব্যবহৃত হয়।
  4. close/1: ফাইল বন্ধ করতে ব্যবহৃত হয়।

ফাইল থেকে ডেটা পড়া (Reading from Files)

প্রোলগে ফাইল থেকে ডেটা পড়তে open/3 প্রেডিকেটটি ব্যবহার করা হয়। এই প্রেডিকেটটি ফাইলটি খুলে আপনাকে একটি স্ট্রীম (stream) প্রদান করে, যা আপনি read/2 প্রেডিকেটের মাধ্যমে পড়তে পারেন।

ফাইল থেকে ডেটা পড়ার প্রক্রিয়া:

  1. open/3: ফাইলটি ওপেন করার জন্য।
  2. read/2: ফাইল থেকে ডেটা পড়ার জন্য।
  3. close/1: ফাইল বন্ধ করার জন্য।

ফাইল থেকে ডেটা পড়ার উদাহরণ:

ধরা যাক, একটি ফাইল আছে data.txt নামে যার মধ্যে কিছু তথ্য রয়েছে। আমরা এই তথ্যটি পড়তে চাই।

ফাইল তৈরি করা (data.txt):
প্রোলগ একটি লজিক্যাল প্রোগ্রামিং ভাষা।
এটি ডিক্লারেটিভ পদ্ধতিতে কাজ করে।
ফাইল হ্যান্ডলিং সহজে করা যায় প্রোলগে।
ফাইল থেকে ডেটা পড়ার কোড:
পড়া :-
    open('data.txt', read, Stream),  % ফাইল ওপেন করা
    read(Stream, Line),              % ফাইল থেকে একটি লাইন পড়া
    write(Line),                     % লাইনটি প্রদর্শন করা
    nl,                               % নতুন লাইন
    close(Stream).                   % ফাইল বন্ধ করা

এখানে:

  • open('data.txt', read, Stream) ফাইল data.txt পড়ার জন্য খুলবে।
  • read(Stream, Line) একটি লাইন ফাইল থেকে পড়বে।
  • write(Line) প্রাপ্ত লাইনের কন্টেন্ট প্রদর্শন করবে।
  • close(Stream) ফাইলটি বন্ধ করবে।

কোয়ারি:

?- পড়া.

আউটপুট:

'প্রোলগ একটি লজিক্যাল প্রোগ্রামিং ভাষা।'

ফাইলে ডেটা লেখা (Writing to Files)

ফাইলে ডেটা লেখার জন্য open/3 এবং write/2 প্রেডিকেট ব্যবহার করা হয়। প্রথমে ফাইলটি খুলতে হবে এবং তারপর write/2 ব্যবহার করে ডেটা লিখতে হবে।

ফাইলে ডেটা লেখার প্রক্রিয়া:

  1. open/3: ফাইল লেখার জন্য ওপেন করা।
  2. write/2: ডেটা লিখা।
  3. close/1: ফাইল বন্ধ করা।

ফাইলে ডেটা লেখার উদাহরণ:

লেখা :-
    open('output.txt', write, Stream),    % ফাইল ওপেন করা
    write(Stream, 'প্রোলগে ফাইল লেখার উদাহরণ।'), % ফাইলে লেখা
    nl(Stream),                           % নতুন লাইন
    write(Stream, 'এটি একটি নতুন লাইন।'), 
    close(Stream).                        % ফাইল বন্ধ করা

এখানে:

  • open('output.txt', write, Stream) ফাইলটি লেখার জন্য খোলা হবে।
  • write(Stream, 'প্রোলগে ফাইল লেখার উদাহরণ।') ফাইলে ডেটা লেখা হবে।
  • nl(Stream) নতুন লাইন লিখবে।
  • close(Stream) ফাইল বন্ধ করবে।

এটি output.txt ফাইলে লেখার জন্য ব্যবহার করা হবে।

কোয়ারি:

?- লেখা.

এটি output.txt ফাইলে নিম্নলিখিত তথ্য লেখে:

প্রোলগে ফাইল লেখার উদাহরণ।
এটি একটি নতুন লাইন।

ফাইলে ডেটা পড়া এবং লেখা (Reading and Writing)

প্রোলগে আপনি একই সাথে ফাইলে ডেটা পড়তে এবং লিখতে পারেন, তবে নিশ্চিত হতে হবে যে ফাইলটি সঠিকভাবে ওপেন এবং ক্লোজ করা হচ্ছে।

ফাইলে ডেটা পড়া এবং লেখা উদাহরণ:

পড়া_এবং_লেখা :-
    open('data.txt', read, InputStream),    % ফাইল ওপেন করা (পড়া)
    open('output.txt', write, OutputStream), % ফাইল ওপেন করা (লেখা)
    repeat,                                 % লুপ শুরু
    read(InputStream, Line),                % ফাইল থেকে একটি লাইন পড়া
    (   Line == end_of_file                 % যদি শেষ লাইন হয়
    ->  true                                % বের হওয়া
    ;   write(OutputStream, Line), nl(OutputStream),  % লেখা
        fail                                 % পুনরায় পড়া
    ),
    close(InputStream),                     % ইনপুট ফাইল বন্ধ
    close(OutputStream).                    % আউটপুট ফাইল বন্ধ

এখানে:

  • প্রথমে data.txt ফাইলটি পড়া হবে।
  • output.txt ফাইলের মধ্যে data.txt এর কনটেন্ট লেখা হবে।
  • যখন end_of_file পাওয়া যাবে, তখন প্রোগ্রামটি শেষ হবে।

কোয়ারি:

?- পড়া_এবং_লেখা.

এটি data.txt এর সমস্ত ডেটা output.txt তে লিখে দিবে।


সারসংক্ষেপ:

প্রোলগে ফাইল হ্যান্ডলিং খুবই সহজ এবং শক্তিশালী। ফাইল থেকে ডেটা পড়া এবং লেখা করার জন্য আমরা open/3, read/2, write/2, এবং close/1 প্রেডিকেট ব্যবহার করি। ফাইল অপারেশনগুলো সঠিকভাবে সম্পাদন করতে স্ট্রীম ব্যবহার করা হয়, যা ফাইলের মধ্যে ডেটা প্রবাহ নিয়ন্ত্রণ করে। এই প্রক্রিয়া ব্যবহার করে আপনি টেক্সট ফাইলগুলোতে ডেটা সংরক্ষণ এবং বিশ্লেষণ করতে পারবেন।

Content added By

প্রোলগে External Input Handling এবং File I/O (ইনপুট এবং আউটপুট) ব্যবহার করে আমরা ফাইল থেকে ডেটা পড়তে এবং ফাইলে ডেটা লিখতে পারি। এটি একটি প্রোগ্রামিং ভাষা হিসেবে প্রোলগের কার্যকারিতা বৃদ্ধি করতে সাহায্য করে, যেখানে ফাইল ম্যানিপুলেশন এবং এক্সটার্নাল ডেটা প্রোসেসিং খুবই গুরুত্বপূর্ণ।

External Input Handling:

External input বলতে বোঝায় এমন ইনপুট, যা প্রোগ্রামের বাহির থেকে আসছে, যেমন কী-বোর্ড ইনপুট, ফাইল ইনপুট, বা ইউজার থেকে কোনো ইনপুট ডাটা। প্রোলগে আপনি ইনপুট গ্রহণ করার জন্য read/1, read_line_to_string/2, get_char/1 ইত্যাদি ফাংশন ব্যবহার করতে পারেন।

কী-বোর্ড ইনপুট:

প্রোলগে কী-বোর্ড থেকে ইনপুট নেওয়ার জন্য read/1 ফাংশন ব্যবহার করা হয়, যা ইউজারের ইনপুটকে গ্রহণ করে এবং সেটি একটি প্রলগ টার্ম হিসেবে ধারণ করে।

উদাহরণ:

? - read(X).

এখানে, আপনি X নামক ভেরিয়েবলকে ইনপুট দেবেন। প্রোলগ সেই ইনপুটটি X এ সংরক্ষণ করবে।

কোড:

?- read(X).
|: hello.
X = hello.

এখানে, hello হলো ইউজারের ইনপুট এবং তা X ভেরিয়েবলে সংরক্ষিত হয়।

স্ট্রিং ইনপুট:

স্ট্রিং ইনপুটের জন্য, read_line_to_string/2 ব্যবহার করা হয়, যা ইউজারের ইনপুট একটি স্ট্রিং আকারে গ্রহণ করে।

উদাহরণ:

? - read_line_to_string(user_input, Input).

এখানে Input ইউজারের ইনপুট হবে যা একটি স্ট্রিং আকারে গ্রহণ করা হবে।

কোড:

?- read_line_to_string(user_input, Input).
|: Hello, Prolog!
Input = "Hello, Prolog!".

File I/O (File Input/Output):

File I/O (ফাইল ইনপুট/আউটপুট) হল ফাইল থেকে ডেটা পড়া এবং ফাইলে ডেটা লেখা। প্রোলগে ফাইল থেকে ডেটা পড়তে এবং ফাইলে ডেটা লেখার জন্য নির্দিষ্ট ফাংশন ব্যবহার করা হয়। নিচে কিছু গুরুত্বপূর্ণ File I/O প্রেডিকেট দেওয়া হলো:

  1. ফাইল খোলা (Opening Files):
    ফাইল খোলার জন্য open/3 ব্যবহার করা হয়, যেখানে প্রথম আর্গুমেন্টটি ফাইলের নাম, দ্বিতীয় আর্গুমেন্টটি মোড (যেমন read, write, append), এবং তৃতীয় আর্গুমেন্টটি স্ট্রিম।

    উদাহরণ:

    open('example.txt', write, Stream).
  2. ফাইল থেকে ডেটা পড়া (Reading from a File):
    ফাইল থেকে ডেটা পড়ার জন্য read/2 বা read_line_to_string/2 ব্যবহার করা হয়।

    উদাহরণ:

    open('example.txt', read, Stream),
    read(Stream, X),
    close(Stream).

    এখানে, X ফাইল থেকে প্রথম ডেটা হবে এবং তারপর স্ট্রিমটি বন্ধ হয়ে যাবে।

  3. ফাইলে ডেটা লেখা (Writing to a File):
    ফাইলের মধ্যে ডেটা লেখার জন্য write/2 বা writeln/2 ব্যবহার করা হয়।

    উদাহরণ:

    open('example.txt', write, Stream),
    write(Stream, 'Hello, Prolog!'),
    close(Stream).

    এখানে 'Hello, Prolog!' ফাইলে লেখা হবে।

  4. ফাইলের মধ্যে নতুন লাইন যোগ করা (Appending to a File):
    ফাইলে নতুন লাইন যোগ করার জন্য append/3 ফাংশন ব্যবহার করা হয়।

    উদাহরণ:

    open('example.txt', append, Stream),
    write(Stream, 'This is a new line.'),
    close(Stream).
  5. ফাইল বন্ধ করা (Closing Files):
    ফাইল বন্ধ করতে close/1 ফাংশন ব্যবহার করা হয়। এটি ব্যবহৃত স্ট্রিম বন্ধ করে দেয়।

    উদাহরণ:

    close(Stream).

File I/O এর মাধ্যমে ডেটা প্রক্রিয়াকরণ:

ফাইল ইনপুট এবং ফাইল আউটপুট ব্যবহার করে, আপনি একটি প্রোগ্রামে ডেটা সংগ্রহ করতে পারেন, প্রক্রিয়া করতে পারেন এবং ফলাফল ফাইলে রেকর্ড করতে পারেন।

ফাইল থেকে সব লাইন পড়া:

ফাইলের প্রতিটি লাইন পড়তে, আপনি read_line_to_string/2 ব্যবহার করতে পারেন এবং ফাইলের মধ্যে প্রতিটি লাইনকে আলাদাভাবে প্রক্রিয়া করতে পারেন।

read_file_lines(FileName) :-
    open(FileName, read, Stream),
    read_line_to_string(Stream, Line),
    process_line(Line),
    close(Stream).
    
process_line(Line) :-
    write(Line), nl.

এখানে, process_line/1 একটি ফাংশন যা প্রতিটি লাইন প্রিন্ট করবে।

ফাইলে একটি তালিকা লেখা:

আপনি একটি লিস্টকে ফাইলে লেখার জন্য একটি লুপ তৈরি করতে পারেন:

write_list_to_file([], _).
write_list_to_file([H|T], Stream) :-
    write(Stream, H),
    nl(Stream),
    write_list_to_file(T, Stream).

save_list_to_file(List, FileName) :-
    open(FileName, write, Stream),
    write_list_to_file(List, Stream),
    close(Stream).

এটি List এর প্রতিটি উপাদান ফাইলে লেখে।


সারসংক্ষেপ:

প্রোলগে External Input Handling এবং File I/O অত্যন্ত গুরুত্বপূর্ণ টুল। কী-বোর্ড ইনপুট, ফাইল ইনপুট, এবং ফাইল আউটপুট এর মাধ্যমে প্রোগ্রামটি বাইরের ডেটা গ্রহণ এবং প্রক্রিয়া করতে সক্ষম হয়। প্রোলগের বিল্ট-ইন ফাংশন এবং open/3, read/2, write/2, close/1 ইত্যাদি ফাংশন ব্যবহার করে ফাইল ম্যানিপুলেশন খুব সহজভাবে করা যায়। এর মাধ্যমে ফাইল থেকে ডেটা পড়া, ফাইলে ডেটা লেখা এবং ফাইলের মধ্যে লাইন অ্যাড করা সম্ভব হয়, যা প্রোগ্রামের কার্যকারিতা এবং ক্ষমতা বৃদ্ধি করে।

Content added By
Promotion

Are you sure to start over?

Loading...