মূল কন্টেন্টে যান
মডিউল 5 · 2-এর পাঠ 2কোর্সে 10/10~15 min
মডিউল পাঠ (2/2)

ফাইল I/O অপারেশন

একবার একটি ফাইল DATA DIVISION-এ যুক্ত এবং ঘোষণা করা হয়ে গেলে, আমরা এটিকে PROCEDURE DIVISION-এর মধ্যে ব্যবহার করতে পারি। COBOL-এ, ফাইলগুলির জীবনচক্র পরিচালনা একটি আদর্শ, অপরিহার্য প্রবাহ অনুসরণ করে: খুলুন, ক্রিয়াকলাপ সম্পাদন করুন (পড়ুন বা লিখুন) এবং বন্ধ করুন।


1. ওপেনিং ফাইল: ওপেন স্টেটমেন্ট

আপনি একটি ফাইল থেকে পড়তে বা লিখতে পারার আগে, এটি অবশ্যই উপযুক্ত অ্যাক্সেস মোড নির্দিষ্ট করে খুলতে হবে:

COBOL
       OPEN INPUT SALES-FILE.

প্রধান মোড হল:

  • INPUT: ফাইলটি শুধুমাত্র-পঠন মোডে খোলা হয়েছে৷ ফাইলটি ডিস্কে থাকা আবশ্যক, অন্যথায় প্রোগ্রামটি ব্যর্থ হবে।
  • OUTPUT: ফাইলটি লেখার মোডে খোলা হয়েছে৷ যদি ফাইলটি ইতিমধ্যেই বিদ্যমান থাকে, তবে এর আগের বিষয়বস্তু মুছে ফেলা হয় (ওভাররাইট)। যদি এটি বিদ্যমান না থাকে তবে এটি তৈরি হয়।
  • EXTEND: ফাইলটি ডেটা যুক্ত করার জন্য খোলা হয়। বিদ্যমান ফাইলের শেষ থেকে শুরু করে নতুন রেকর্ড লেখা হবে।
  • I-O: ফাইলটি পড়া এবং লেখা উভয়ের জন্য খোলা হয় (বেশিরভাগই আপেক্ষিক বা সূচীকৃত অ্যাক্সেস ফাইলের জন্য ব্যবহৃত হয়, রৈখিক অনুক্রমিক ফাইল নয়)।

2. রিডিং ডেটা: READ স্টেটমেন্ট

একটি অনুক্রমিক ফাইল থেকে একটি রেকর্ড পড়তে, আমরা READ স্টেটমেন্ট ব্যবহার করি। যেহেতু আমরা আগে থেকে জানি না যে ফাইলটিতে কতগুলি রেকর্ড রয়েছে, তাই আমাদের অবশ্যই AT END ধারাটি ব্যবহার করে ফাইলের শেষ (EOF) শর্তটি পরিচালনা করতে হবে:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE: নোট করুন যে বিবৃতিটি যৌক্তিক ফাইলের নাম উল্লেখ করে (SELECT এবং FD ধারায় সংজ্ঞায়িত), রেকর্ডের নাম নয়।
  • AT END: আপনি যখন সর্বশেষ উপলব্ধ রেকর্ডটি পড়ার চেষ্টা করেন তখন চালানোর জন্য নির্দেশাবলী নির্দিষ্ট করে৷ সাধারণত, আপনি একটি পতাকা পরিবর্তনশীল (যেমন WS-EOF) "Y" এ সেট করেন।
  • END-READ: পঠিত বিবৃতিটি স্পষ্টভাবে বন্ধ করে দেয়।

3. রাইটিং ডেটা: রাইটিং স্টেটমেন্ট

একটি ফাইলে ডেটা সন্নিবেশ করতে, আমরা WRITE স্টেটমেন্ট ব্যবহার করি।

[!সতর্কতা] COBOL-এ, আপনি একটি ফাইল (READ SALES-FILE) পড়েন, কিন্তু আপনি একটি রেকর্ড (WRITE SALES-RECORD) লেখেন। WRITE SALES-FILE লেখা একটি সাধারণ সিনট্যাক্স ত্রুটি যা সংকলনকে বাধা দেবে।

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

WRITE বিবৃতিটি কার্যকর করার আগে, FD রেকর্ড কাঠামোর অধীনস্থ ক্ষেত্রগুলি (এই ক্ষেত্রে, SALES-RECORD) মেমরিতে পূরণ করতে হবে৷


4. ক্লোজিং ফাইল: ক্লোজ স্টেটমেন্ট

প্রক্রিয়াকরণ সম্পূর্ণ হলে, সিস্টেম সংস্থানগুলি প্রকাশ করতে এবং সমস্ত ডেটা ডিস্কে লেখা হয়েছে তা নিশ্চিত করতে প্রতিটি খোলা ফাইল বন্ধ করতে হবে:

COBOL
       CLOSE SALES-FILE.

মনে রাখবেন যে CLOSE বিবৃতিটি তার যুক্তি হিসাবে লজিক্যাল ফাইলের নাম নেয়, রেকর্ডের নাম নয়।


চেষ্টা করে দেখুন

ব্যায়াম#cobol.m5.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

ইনপুট মোডে সেলস-ফাইল খোলার মাধ্যমে, প্রথম রেকর্ডটি পড়ে এবং ফাইলের শেষ প্রান্তে পৌঁছে গেলে WS-EOF কন্ট্রোল ভেরিয়েবলকে 'Y' তে সেট করে প্রক্রিয়া বিভাগটি সম্পূর্ণ করুন। অবশেষে, থামার আগে ফাইলটি বন্ধ করতে মনে রাখবেন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ক্রমানুসারে লিখুন: ইনপুট সেলস-ফাইল খুলুন। তারপর শেষ পর্যন্ত বিক্রয়-ফাইল পড়ুন WS-EOF এন্ড-রিডে 'Y' নিয়ে যান। তারপর সেলস-ফাইল বন্ধ করুন। এবং অবশেষে দৌড় বন্ধ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#cobol.m5.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

আউটপুট মোডে সেলস-ফাইল খোলার মাধ্যমে প্রক্রিয়া বিভাগটি সম্পূর্ণ করুন। SALES-ID-এ 1001 মান এবং 250.50 SALES-AMOUNT-এ সরান, তারপর ফাইলে SALES-RECORD লিখুন। অবশেষে, প্রোগ্রাম বন্ধ করার আগে ফাইলটি বন্ধ করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ফাইলটি ওপেন আউটপুট সেলস-ফাইল দিয়ে খুলুন। সেলস-আইডি এবং সেলস-অ্যামাউন্টে মান নির্ধারণ করতে মুভ ব্যবহার করুন, সেলস-রেকর্ড লিখুন। (রেকর্ড লেখা, ফাইল নয়!), ক্লোজ সেলস-ফাইল দিয়ে বন্ধ করুন। এবং STOP RUN দিয়ে শেষ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ