COBOL में नियंत्रण संरचनाएं – Control Structures in COBOL

COBOL में नियंत्रण संरचनाएं – Control Structures in COBOL

COBOL में कंट्रोल स्ट्रक्चर्स प्रोग्राम के फ्लो को नियंत्रित करने के लिए उपयोग किए जाते हैं। ये स्ट्रक्चर्स आपको यह निर्धारित करने की सुविधा देते हैं कि कोड का कौन सा हिस्सा कब और कैसे निष्पादित होना चाहिए। इस खंड में, हम COBOL के प्रमुख कंट्रोल स्ट्रक्चर्स जैसे IF, EVALUATE, और PERFORM के बारे में चर्चा करेंगे। इन कंट्रोल स्ट्रक्चर्स का सही उपयोग आपके प्रोग्राम को अधिक संगठित, कुशल, और प्रभावी बनाता है। इस गाइड के माध्यम से, आप सीखेंगे कि कैसे कंट्रोल स्ट्रक्चर्स का उपयोग करके लॉजिक और कार्यों को नियंत्रित किया जा सकता है।

कंडीशनल स्टेटमेंट्स (Conditional Statements: IF, EVALUATE)

COBOL में कंडीशनल स्टेटमेंट्स प्रोग्राम के फ्लो को नियंत्रित करने के लिए महत्वपूर्ण होते हैं। ये स्टेटमेंट्स आपको यह तय करने में मदद करते हैं कि कोड का कौन सा हिस्सा किसी विशेष शर्त के आधार पर निष्पादित होगा। COBOL में दो प्रमुख कंडीशनल स्टेटमेंट्स हैं: IF और EVALUATE। आइए हम इन्हें विस्तार से समझते हैं।

1. IF स्टेटमेंट (IF Statement)

  • परिभाषा: IF स्टेटमेंट का उपयोग किसी शर्त की जाँच करने के लिए किया जाता है। यदि शर्त सत्य होती है, तो निर्दिष्ट कोड ब्लॉक निष्पादित होता है; अन्यथा, वैकल्पिक ELSE ब्लॉक निष्पादित हो सकता है।
  • सिंटैक्स:
    IF शर्त
        THEN कार्रवाई
    ELSE
        वैकल्पिक कार्रवाई
    END-IF.
    

     

  • उदाहरण:
    IF TOTAL-AMOUNT > 5000
        DISPLAY 'High Value Transaction'.
    ELSE
        DISPLAY 'Normal Transaction'.
    END-IF.
    

    इस उदाहरण में, यदि TOTAL-AMOUNT 5000 से अधिक है, तो “High Value Transaction” संदेश प्रदर्शित होगा; अन्यथा, “Normal Transaction” संदेश प्रदर्शित होगा।

  • नेस्टेड IF स्टेटमेंट्स (Nested IF Statements): आप एक IF स्टेटमेंट के अंदर अन्य IF स्टेटमेंट्स भी डाल सकते हैं।
    IF BALANCE > 1000
        IF ACCOUNT-TYPE = 'SAVINGS'
            DISPLAY 'Premium Savings Account'.
        END-IF
    ELSE
        DISPLAY 'Regular Account'.
    END-IF.
    

     

2. EVALUATE स्टेटमेंट (EVALUATE Statement)

  • परिभाषा: EVALUATE स्टेटमेंट एक मल्टी-वे ब्रांचिंग स्टेटमेंट है, जिसे आप स्विच-केस स्टेटमेंट के रूप में समझ सकते हैं। यह विभिन्न स्थितियों की जाँच करता है और उनमें से किसी एक के सत्य होने पर संबंधित कोड ब्लॉक को निष्पादित करता है।
  • सिंटैक्स:
    EVALUATE शर्त-1
        WHEN मान-1
            कार्रवाई-1
        WHEN मान-2
            कार्रवाई-2
        WHEN OTHER
            डिफ़ॉल्ट कार्रवाई
    END-EVALUATE.
    

     

  • उदाहरण:
    EVALUATE TRUE
        WHEN AGE < 18
            DISPLAY 'Minor'
        WHEN AGE >= 18 AND AGE < 60
            DISPLAY 'Adult'
        WHEN AGE >= 60
            DISPLAY 'Senior Citizen'
        WHEN OTHER
            DISPLAY 'Invalid Age'
    END-EVALUATE.
    

    इस उदाहरण में, AGE के आधार पर अलग-अलग संदेश प्रदर्शित किए जाएंगे। यदि AGE 18 से कम है, तो “Minor” प्रदर्शित होगा; यदि AGE 18 और 60 के बीच है, तो “Adult” प्रदर्शित होगा; और यदि AGE 60 या उससे अधिक है, तो “Senior Citizen” प्रदर्शित होगा।

  • नेस्टेड EVALUATE स्टेटमेंट्स (Nested EVALUATE Statements): आप एक EVALUATE स्टेटमेंट के भीतर अन्य EVALUATE स्टेटमेंट्स भी नेस्ट कर सकते हैं।
    EVALUATE TRUE
        WHEN GRADE = 'A'
            DISPLAY 'Excellent'
        WHEN GRADE = 'B'
            DISPLAY 'Good'
        WHEN GRADE = 'C'
            DISPLAY 'Fair'
        WHEN OTHER
            EVALUATE TRUE
                WHEN GRADE = 'D'
                    DISPLAY 'Poor'
                WHEN GRADE = 'F'
                    DISPLAY 'Fail'
            END-EVALUATE
    END-EVALUATE.
    

     

उदाहरण (Example Program):

IDENTIFICATION DIVISION.
PROGRAM-ID. ConditionalExample.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 TOTAL-AMOUNT    PIC 9(5)V99 VALUE 4500.
01 ACCOUNT-TYPE    PIC X(10) VALUE 'SAVINGS'.
01 AGE             PIC 99 VALUE 25.

PROCEDURE DIVISION.
    IF TOTAL-AMOUNT > 5000
        DISPLAY 'High Value Transaction'
    ELSE
        DISPLAY 'Normal Transaction'
    END-IF.

    EVALUATE TRUE
        WHEN ACCOUNT-TYPE = 'SAVINGS'
            DISPLAY 'Savings Account'
        WHEN ACCOUNT-TYPE = 'CURRENT'
            DISPLAY 'Current Account'
        WHEN OTHER
            DISPLAY 'Unknown Account Type'
    END-EVALUATE.

    EVALUATE TRUE
        WHEN AGE < 18
            DISPLAY 'Minor'
        WHEN AGE >= 18 AND AGE < 60
            DISPLAY 'Adult'
        WHEN AGE >= 60
            DISPLAY 'Senior Citizen'
        WHEN OTHER
            DISPLAY 'Invalid Age'
    END-EVALUATE.

    STOP RUN.

लूपिंग स्टेटमेंट्स (Looping Statements: PERFORM, TIMES)

COBOL में लूपिंग स्टेटमेंट्स का उपयोग कोड के एक हिस्से को कई बार निष्पादित करने के लिए किया जाता है। यह प्रक्रिया तब उपयोगी होती है जब आपको बार-बार एक ही कार्य करना हो, जैसे डेटा प्रोसेसिंग, रिकॉर्ड्स को पढ़ना या गणनाएँ करना। COBOL में लूपिंग के लिए मुख्य स्टेटमेंट्स हैं PERFORM और TIMES। आइए इन्हें विस्तार से समझते हैं।

1. PERFORM स्टेटमेंट (PERFORM Statement)

  • परिभाषा: PERFORM स्टेटमेंट का उपयोग कोड के एक ब्लॉक को एक निर्दिष्ट संख्या में या जब तक कोई शर्त पूरी न हो जाए, तब तक बार-बार निष्पादित करने के लिए किया जाता है। यह एक बहुमुखी लूपिंग स्टेटमेंट है जिसे विभिन्न तरीकों से उपयोग किया जा सकता है।
  • प्रकार:
    • Simple PERFORM: एक विशिष्ट सेक्शन या पैराग्राफ को एक बार निष्पादित करता है।
    • PERFORM UNTIL: तब तक एक कोड ब्लॉक को निष्पादित करता है जब तक कि कोई शर्त पूरी नहीं हो जाती।
    • PERFORM VARYING: एक वेरिएबल की वैल्यू को बदलते हुए कोड ब्लॉक को बार-बार निष्पादित करता है।

उदाहरण:

  • Simple PERFORM:
    PERFORM PROCESS-DATA.
    

     

  • PERFORM UNTIL:
    PERFORM PROCESS-DATA UNTIL EOF-FLAG = 'YES'.
    

     

  • PERFORM VARYING:
    PERFORM PROCESS-DATA
        VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 10.
    

     

उदाहरण का विवरण:

  • PROCESS-DATA नामक पैराग्राफ या सेक्शन को निष्पादित किया जाएगा।
  • PERFORM UNTIL का उपयोग तब किया जाता है जब आपको एक लूप को तब तक चलाना हो जब तक कोई शर्त पूरी न हो जाए। इस उदाहरण में, लूप तब तक चलेगा जब तक EOF-FLAG ‘YES’ न हो जाए।
  • PERFORM VARYING का उपयोग एक काउंटर वेरिएबल की वैल्यू को बदलते हुए लूप को चलाने के लिए किया जाता है। यह तब तक चलेगा जब तक काउंटर की वैल्यू 10 से अधिक नहीं हो जाती।

2. TIMES स्टेटमेंट (TIMES Statement)

  • परिभाषा: TIMES स्टेटमेंट का उपयोग कोड के एक ब्लॉक को एक निश्चित संख्या में निष्पादित करने के लिए किया जाता है। यह लूपिंग के सबसे सरल रूपों में से एक है और तब उपयोगी होता है जब आपको निश्चित संख्या में बार कोड चलाना हो।
  • सिंटैक्स:
    PERFORM PROCESS-DATA TIMES n.
    

     

  • उदाहरण:
    PERFORM DISPLAY-HELLO 5 TIMES.
    

    इस उदाहरण में, DISPLAY-HELLO पैराग्राफ को 5 बार निष्पादित किया जाएगा।

3. उदाहरण प्रोग्राम (Example Program)

IDENTIFICATION DIVISION.
PROGRAM-ID. LoopingExample.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 COUNTER            PIC 9(2) VALUE 0.
01 EOF-FLAG           PIC X VALUE 'NO'.
01 TOTAL-SUM          PIC 9(4) VALUE 0.
01 NUMBER             PIC 9(2) VALUE 5.

PROCEDURE DIVISION.
    DISPLAY 'Starting PERFORM UNTIL loop...'.
    PERFORM ADD-NUMBER UNTIL COUNTER > 10.

    DISPLAY 'Starting PERFORM TIMES loop...'.
    PERFORM DISPLAY-HELLO 3 TIMES.

    STOP RUN.

ADD-NUMBER.
    ADD NUMBER TO TOTAL-SUM.
    ADD 1 TO COUNTER.
    DISPLAY 'Current Sum: ' TOTAL-SUM.

DISPLAY-HELLO.
    DISPLAY 'Hello, COBOL!'.

प्रोग्राम की व्याख्या (Explanation of the Program):

  • PERFORM UNTIL: ADD-NUMBER पैराग्राफ को तब तक निष्पादित करता है जब तक कि COUNTER की वैल्यू 10 से अधिक नहीं हो जाती। प्रत्येक लूप में, TOTAL-SUM में NUMBER जोड़ा जाता है, और COUNTER 1 से बढ़ाया जाता है।
  • PERFORM TIMES: DISPLAY-HELLO पैराग्राफ को 3 बार निष्पादित करता है, जिसमें “Hello, COBOL!” संदेश 3 बार प्रदर्शित होता है।

COBOL में एरर हैंडलिंग (Error Handling)

एरर हैंडलिंग किसी भी प्रोग्रामिंग भाषा में एक महत्वपूर्ण पहलू होता है, और COBOL में भी यह आवश्यक है कि आप प्रोग्राम के संचालन के दौरान उत्पन्न होने वाली त्रुटियों को सही ढंग से प्रबंधित करें। COBOL में एरर हैंडलिंग मुख्य रूप से FILE STATUS, INVALID KEY, और AT END क्लॉज़ के माध्यम से की जाती है। यह सुनिश्चित करता है कि आपका प्रोग्राम त्रुटियों को पहचान सके और उन पर उचित प्रतिक्रिया दे सके, जिससे डेटा की सुरक्षा और प्रोग्राम की विश्वसनीयता बनी रहती है।

1. FILE STATUS

  • परिभाषा: FILE STATUS एक वेरिएबल होता है जिसे प्रत्येक फाइल के लिए डिफाइन किया जाता है। यह वेरिएबल फाइल ऑपरेशन्स के बाद एक कोड स्टोर करता है, जो बताता है कि ऑपरेशन सफल रहा या असफल।
  • घोषणा: FILE STATUS को FD (File Description) के साथ घोषित किया जाता है।
  • सिंटैक्स:
    FILE STATUS IS WS-FILE-STATUS.
    

     

  • उदाहरण:
    FD  INPUT-FILE
        LABEL RECORDS ARE STANDARD
        VALUE OF FILE-ID IS "inputfile.txt"
        FILE STATUS IS WS-FILE-STATUS.
    
    WORKING-STORAGE SECTION.
    01 WS-FILE-STATUS       PIC XX.
    

     

  • FILE STATUS कोड्स:
    • 00: ऑपरेशन सफल रहा।
    • 02: ऑपरेशन सफल रहा, लेकिन एक वैकल्पिक स्थिति उत्पन्न हुई।
    • 10: फाइल का अंत आ गया (EOF)।
    • 90: लॉजिक एरर।
    • 91: फाइल को खोलने में त्रुटि।
    • 92: रिकॉर्ड को पढ़ने/लिखने में त्रुटि।
    • 93: फाइल लॉकिंग त्रुटि।

उदाहरण का विवरण:

  • WS-FILE-STATUS वेरिएबल प्रत्येक फाइल ऑपरेशन के बाद स्थिति कोड स्टोर करेगा, जिसे बाद में जाँच कर आप एरर हैंडलिंग कर सकते हैं।

2. INVALID KEY

  • परिभाषा: INVALID KEY क्लॉज़ का उपयोग तब किया जाता है जब आप इंडेक्स्ड या रिलेटिव फाइल में की (KEY) के आधार पर रिकॉर्ड एक्सेस कर रहे हों। यदि निर्दिष्ट की के साथ रिकॉर्ड नहीं पाया जाता है, तो INVALID KEY ब्लॉक निष्पादित किया जाता है।
  • सिंटैक्स:
    READ INPUT-FILE
        INVALID KEY
            DISPLAY 'Error: Record not found'.
    

     

  • उदाहरण:
    READ INPUT-FILE KEY IS CUSTOMER-ID
        INVALID KEY
            DISPLAY 'Customer ID not found'
    END-READ.
    

     

उदाहरण का विवरण:

  • यदि CUSTOMER-ID के साथ कोई रिकॉर्ड नहीं मिलता है, तो “Customer ID not found” संदेश प्रदर्शित किया जाएगा।

3. AT END

  • परिभाषा: AT END क्लॉज़ का उपयोग तब किया जाता है जब आप सीक्वेंशियल फाइल को पढ़ रहे होते हैं। जब फाइल का अंत आ जाता है (EOF), तो AT END ब्लॉक निष्पादित होता है।
  • सिंटैक्स:
    READ INPUT-FILE
        AT END
            DISPLAY 'End of file reached'.
    

     

  • उदाहरण:
    READ INPUT-FILE INTO INPUT-RECORD
        AT END
            MOVE 'YES' TO EOF-FLAG
            DISPLAY 'End of file reached'.
    END-READ.
    

     

उदाहरण का विवरण:

  • जब फाइल का अंत आ जाता है, तो EOF-FLAG ‘YES’ में बदल जाता है, और “End of file reached” संदेश प्रदर्शित होता है।

4. उदाहरण प्रोग्राम (Example Program)

IDENTIFICATION DIVISION.
PROGRAM-ID. ErrorHandlingExample.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT INPUT-FILE ASSIGN TO 'inputfile.txt'
        FILE STATUS IS WS-FILE-STATUS.

DATA DIVISION.
FILE SECTION.
FD  INPUT-FILE.
01  INPUT-RECORD.
    05  CUSTOMER-ID       PIC 9(5).
    05  CUSTOMER-NAME     PIC X(30).
    05  TRANSACTION-AMOUNT PIC 9(7)V99.

WORKING-STORAGE SECTION.
01  WS-FILE-STATUS       PIC XX.
01  EOF-FLAG             PIC X VALUE 'NO'.

PROCEDURE DIVISION.
    OPEN INPUT INPUT-FILE.

    PERFORM UNTIL EOF-FLAG = 'YES'
        READ INPUT-FILE INTO INPUT-RECORD
            AT END
                MOVE 'YES' TO EOF-FLAG
                DISPLAY 'End of file reached'
            NOT AT END
                IF WS-FILE-STATUS NOT = '00'
                    DISPLAY 'File read error: ' WS-FILE-STATUS
                ELSE
                    DISPLAY 'Customer ID: ' CUSTOMER-ID
                    DISPLAY 'Customer Name: ' CUSTOMER-NAME
                    DISPLAY 'Transaction Amount: ' TRANSACTION-AMOUNT
                END-IF
        END-READ
    END-PERFORM.

    CLOSE INPUT-FILE.

    STOP RUN.

प्रोग्राम की व्याख्या (Explanation of the Program):

  • FILE STATUS: WS-FILE-STATUS वेरिएबल प्रत्येक फाइल ऑपरेशन के बाद स्थिति कोड को स्टोर करता है। यदि फाइल पढ़ने में कोई त्रुटि होती है, तो WS-FILE-STATUS का मूल्य ’00’ नहीं होगा, और “File read error” संदेश प्रदर्शित किया जाएगा।
  • AT END: जब फाइल का अंत आ जाता है, तो EOF-FLAG ‘YES’ में बदल जाता है, और “End of file reached” संदेश प्रदर्शित होता है।
  • NOT AT END: यदि फाइल का अंत नहीं हुआ है और पढ़ने की प्रक्रिया सफल रही है, तो ग्राहक का विवरण प्रदर्शित किया जाएगा।


Index