मुख्य सामग्री पर जाएं
मॉड्यूल 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 कथन का उपयोग करते हैं। चूँकि हम पहले से नहीं जानते कि फ़ाइल में कितने रिकॉर्ड हैं, हमें हमेशा 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लोड हो रहा है...

इनपुट मोड में SALES-FILE खोलकर, पहला रिकॉर्ड पढ़कर, और फ़ाइल के अंत तक पहुंचने पर WS-EOF नियंत्रण चर को 'Y' पर सेट करके प्रक्रिया प्रभाग को पूरा करें। अंत में, रुकने से पहले फ़ाइल को बंद करना याद रखें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

क्रम में लिखें: इनपुट बिक्री-फ़ाइल खोलें। फिर बिक्री-फ़ाइल पढ़ें अंत में 'Y' को WS-EOF अंत-पढ़ें पर ले जाएं। फिर बिक्री-फ़ाइल बंद करें। और अंत में दौड़ना बंद करो।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#cobol.m5.l2.e2
प्रयास: 0लोड हो रहा है...

आउटपुट मोड में सेल्स-फ़ाइल खोलकर प्रक्रिया प्रभाग को पूरा करें। मान 1001 को SALES-ID और 250.50 को SALES-AMOUNT में ले जाएँ, फिर फ़ाइल में SALES-RECORD लिखें। अंत में, प्रोग्राम को रोकने से पहले फ़ाइल को बंद कर दें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

ओपन आउटपुट सेल्स-फ़ाइल के साथ फ़ाइल खोलें, सेल्स-आईडी और सेल्स-राशि को मान निर्दिष्ट करने के लिए MOVE का उपयोग करें, सेल्स-रिकॉर्ड लिखें निष्पादित करें। (रिकॉर्ड लिखना, फ़ाइल नहीं!), CLOSE SALES-FILE के साथ बंद करें। और स्टॉप रन के साथ समाप्त करें।

3 प्रयासों के बाद समाधान उपलब्ध है