कंट्रोल लैंग्वेज: Difference between revisions
No edit summary |
No edit summary |
||
Line 20: | Line 20: | ||
| website = | | website = | ||
}} | }} | ||
नियंत्रण भाषा (सीएल) मूल रूप से [[आईबीएम]] द्वारा प्रणाली / 38 [[नियंत्रण कार्यक्रम सुविधा]] के लिए बनाई गई स्क्रिप्टिंग भाषा है<ref>{{cite web|url=http://bitsavers.org/pdf/ibm/system38/SC21-7731-5_System_38_Control_Language_Reference_Manual_to_pg_4-708_198209.pdf|title=IBM System/38 Control Language Reference Manual|date=1982-09-10|publisher=IBM|access-date=2021-03-24}}</ref> और बाद में OS/400 (जिसे अब IBM i के नाम से जाना जाता है) में उपयोग किया गया। यह आईबीएम [[नौकरी नियंत्रण भाषा]] से मिलता जुलता है और इसमें कमांड ऑब्जेक्ट्स (*सीएमडी) का सेट होता है, जिसका उपयोग पारंपरिक कार्यक्रमों को शुरू करने या उन कार्यक्रमों के बारे में सहायता पाने के लिए किया जाता है। सीएल का उपयोग सीएल प्रोग्राम ([[खोल स्क्रिप्ट]] के अनुरूप) बनाने के लिए भी किया जा सकता है जहां अतिरिक्त कमांड हैं जो प्रोग्राम जैसी कार्यक्षमता (आईएफ/ईएलएसई, [[घोषणा (कंप्यूटर विज्ञान)]], फ़ाइल इनपुट इत्यादि) प्रदान करते हैं। | |||
चूंकि CL प्रणाली प्रशासन के लिए स्क्रिप्टिंग भाषा है, इसका उपयोग मुख्य रूप से संकलित प्रोग्राम बनाने के लिए किया जाता है। SBMDBJOB कमांड के माध्यम से व्याख्या की गई CL स्क्रिप्ट का उपयोग <ref>[http://www.itjungle.com/fhg/fhg030712-story02.html itjungle.com]</ref> वास्तव में अत्यंत सीमित है। | |||
जबकि आईबीएम डेवलपर्स द्वारा प्रोग्रामों को संकलित करने, डेटा का बैकअप लेने, | जबकि आईबीएम डेवलपर्स द्वारा प्रोग्रामों को संकलित करने, डेटा का बैकअप लेने, प्रणाली कॉन्फ़िगरेशन बदलने, प्रणाली ऑब्जेक्ट विवरण प्रदर्शित करने, या उन्हें हटाने जैसे प्रणाली स्तर के कार्यों को करने के लिए हजारों आदेश लिखे गए थे, आदेश प्रणाली स्तर की चिंताओं तक सीमित नहीं हैं और उपयोगकर्ता भी अनुप्रयोगों के लिए तैयार किए जाते हैं। | ||
== कमांड और प्रोग्राम == | == कमांड और प्रोग्राम == | ||
पैरामीटर (कंप्यूटर | पैरामीटर (कंप्यूटर विज्ञान) ([[कमांड-लाइन तर्क|कमांड-लाइन लाजिक]]) सभी पारंपरिक प्रणाली/38 और एएस/400 कार्यक्रमों [[की]] मुख्य प्रक्रियाओं में परिभाषित हार्ड कोडित सूचियां हैं जो पैरामीटर से बने होते हैं जो संख्यात्मक, अल्फान्यूमेरिक, बूलियन इत्यादि हो सकते हैं और जिस क्रम में पैरामीटर पारित किए जाते हैं वह महत्वपूर्ण है। यह [[यूनिक्स]] और डॉस दुनिया से बड़ा अंतर है जहां यूनिक्स शैल स्क्रिप्ट और [[सी (प्रोग्रामिंग भाषा)]] में पैरामीटर सूची वर्ण पॉइंटर्स का सेट या सरणी है और अधिकतर पैरामीटर स्थितित्मक रूप से निर्भर नहीं होते हैं। | ||
इस समस्या का डेवलपर का समाधान कमांड ऑब्जेक्ट (* सीएमडी) था। जबकि आदेश पर पैरामीटर किसी भी क्रम में निर्दिष्ट किए जा सकते हैं, प्रत्येक पैरामीटर को प्रोग्राम के विशिष्ट क्रम में पारित करने के लिए परिभाषित किया गया है। प्रोग्रामर अन्य बातों के | इस समस्या का डेवलपर का समाधान कमांड ऑब्जेक्ट (* सीएमडी) था। जबकि आदेश पर पैरामीटर किसी भी क्रम में निर्दिष्ट किए जा सकते हैं, प्रत्येक पैरामीटर को प्रोग्राम के विशिष्ट क्रम में पारित करने के लिए परिभाषित किया गया है। प्रोग्रामर अन्य बातों के अतिरिक्त, पैरामीटर के [[डेटा प्रकार]], अद्वितीय पैरामीटर नाम, वर्णनात्मक पाठ (संकेत देने के लिए), डिफ़ॉल्ट मान (केवल निष्पादन के समय पैरामीटर निर्दिष्ट नहीं होने पर उपयोग किया जाता है) को भी परिभाषित कर सकता है, यदि मान निश्चित सीमा तक सीमित हैं सेट या रेंज, यदि प्रोग्राम को कॉल करने से पहले दर्ज किए गए डेटा को दूसरे मान में परिवर्तन किया जाना चाहिए। | ||
जब उपयोगकर्ता टाइप करता है या कमांड का संकेत देता है और एंटर कुंजी दबाता है, तो इसकी सबसे बुनियादी कमांड कॉल करने के लिए एकल प्रोग्राम का नाम देती है। कमांड उपयोगकर्ता द्वारा टाइप किए गए सभी पैरामीटर लेता है, और जो उपयोगकर्ता द्वारा टाइप नहीं किया जाता है, और | जब उपयोगकर्ता टाइप करता है या कमांड का संकेत देता है और एंटर कुंजी दबाता है, तो इसकी सबसे बुनियादी कमांड कॉल करने के लिए एकल प्रोग्राम का नाम देती है। कमांड उपयोगकर्ता द्वारा टाइप किए गए सभी पैरामीटर लेता है, और जो उपयोगकर्ता द्वारा टाइप नहीं किया जाता है, और पैरामीटर सूची बनाता है जो प्रोग्राम को कॉल करने पर पास करता है। | ||
== सिंटेक्स == | == सिंटेक्स == | ||
अधिक सरलीकृत सीएल कमांड सिंटैक्स के लिए [[बैकुस-नौर फॉर्म]] को निम्नानुसार परिभाषित किया जाएगा: | अधिक सरलीकृत सीएल कमांड सिंटैक्स के लिए [[बैकुस-नौर फॉर्म]] को निम्नानुसार परिभाषित किया जाएगा: | ||
<CL-command> ::= command-name [<positional-parameter-list>] [<named-parameter-list>] | |||
<positional-parameter-list> ::= <parameter-value> [<positional-parameter-list>] | |||
<named-parameter-list> ::= parameter-name "(" <parameter-element-list> ")" [<named-parameter-list>] | |||
<parameter-element-list> ::= <parameter-value> [<parameter-element-list>] | |||
<parameter-value> ::= CL-name | | |||
CHGPGM MYPGM | qualified-CL-name | | ||
"*"special-value | | |||
generic-CL-name"*" | | |||
"'"alphanumeric-value"'" | | |||
numeric-value | | |||
"X'"hexadecimal-value"'" | |||
नाम में समाप्त होने वाले आइटम ऑब्जेक्ट (आईबीएम i) नामकरण परंपराओं का पालन करते हैं, जो सामान्यतः बोलते हैं, इसका मतलब है कि नाम अक्षर से शुरू होता है और लंबाई में दस वर्णों तक हो सकता है। (सीएल आदेश भी केस-संवेदी हैं।) | |||
विशिष्ट सीएल कमांड का अच्छा उदाहरण नीचे दिया गया 'चेंज प्रोग्राम' (सीएचजीपीजीएम) कमांड है: | |||
CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('My program.') | |||
उपरोक्त कमांड प्रोग्राम को चार पैरामीटर पास कर रहा है जो प्रोग्राम प्रोसेसिंग को बदलता है और वे हैं: | उपरोक्त कमांड प्रोग्राम को चार पैरामीटर पास कर रहा है जो प्रोग्राम प्रोसेसिंग को बदलता है और वे हैं: | ||
* MYPGM: | * MYPGM: स्थितीय पैरामीटर (PGM), और केवल आवश्यक पैरामीटर। इस स्थिति में यह बदला जा रहा कार्यक्रम का नाम है। स्थितीय पैरामीटर हमेशा पहले होते हैं। बार नामित पैरामीटर प्रकट होने के बाद सभी पैरामीटर जो अनुसरण करते हैं, उन्हें नामित पैरामीटर होना चाहिए। | ||
* ऑप्टिमाइज़ (* पूर्ण): | * ऑप्टिमाइज़ (* पूर्ण): नामित पैरामीटर जो तत्व को निर्दिष्ट करता है जो विशेष मान है। इस स्थिति में यह प्रोग्राम को पूरी तरह से अनुकूलित करने के लिए बदल देगा। | ||
* RMVOBS(*BLKORD *PRCORD): कई विशेष मूल्यों को निर्दिष्ट करने वाला | * RMVOBS(*BLKORD *PRCORD): कई विशेष मूल्यों को निर्दिष्ट करने वाला नामित पैरामीटर (अवलोकनशीलता हटाएं)। इस स्थिति में इसे प्रोग्राम से दो प्रकार के प्रोफाइलिंग डेटा को हटाने के लिए कह रहा है। | ||
* पाठ ('मेरा कार्यक्रम।'): एकल अल्फ़ान्यूमेरिक मान निर्दिष्ट करने वाला | * पाठ ('मेरा कार्यक्रम।'): एकल अल्फ़ान्यूमेरिक मान निर्दिष्ट करने वाला अन्य नामित पैरामीटर। इस स्थिति में यह कार्यक्रम के वर्णनात्मक पाठ को बदल रहा है। | ||
वास्तव में | वास्तव में प्रणाली ऊपर बताए गए चार पैरामीटर से कहीं अधिक पैरामीटर पास करेगा। ऐसा इसलिए है क्योंकि शेष सीएचजीपीजीएम कमांड के पैरामीटर निर्दिष्ट नहीं किए गए थे, इसलिए इसके बजाय डिफ़ॉल्ट मान पारित किए जाएंगे। इस पर प्रत्येक पैरामीटर के लिए, PGM पैरामीटर को छोड़कर, वह डिफ़ॉल्ट *SAME है, जिसका अर्थ है कि इसे परिवर्तित न करें। | ||
== संकेत == | == संकेत == | ||
कमांड टाइप करके और F4 फ़ंक्शन कुंजी दबाकर सभी सीएल कमांड को सीधे कमांड लाइन से या सीएल प्रोग्राम [[सोर्स कोड]] के भीतर संकेत दिया जा सकता है। | कमांड टाइप करके और F4 फ़ंक्शन कुंजी दबाकर सभी सीएल कमांड को सीधे कमांड लाइन से या सीएल प्रोग्राम [[सोर्स कोड]] के भीतर संकेत दिया जा सकता है। OS/400 कमांड को टाइप करके भी संकेत दिया जा सकता है ? आज्ञा से पहले। | ||
(यह | (यह इंटरैक्टिव प्रोग्राम में उपयोगी है जो कमांड स्ट्रिंग को इंगित करता है, पहले से ही कुछ मूल्यों में भरा हुआ है।) | ||
प्रणाली तब पैरामीटर के सेट के साथ स्क्रीन पेश करेगा जिसे प्रोग्राम स्वीकार/आवश्यक करता है (आवश्यक पैरामीटर सामान्यतः हाइलाइट किए जाते हैं)। | |||
आवश्यक पैरामीटर पहले सूचीबद्ध हैं, और | आवश्यक पैरामीटर पहले सूचीबद्ध हैं, और प्रणाली द्वारा आपूर्ति किए गए डिफ़ॉल्ट मान वाले पैरामीटर सबसे अंत में सूचीबद्ध हैं। सभी पैरामीटर देखने के लिए, F10 दबाएं। | ||
यदि किसी | यदि किसी विकल्प के लिए और चयन की आवश्यकता होती है, तो वे संकेतित होते हैं जब आप उस पैरामीटर के लिए उस मान का चयन करते हैं, जो ऑनस्क्रीन प्रदर्शित होता है। | ||
प्रोग्रामर को यह पता लगाने की अनुमति देने के लिए कि प्रत्येक पैरामीटर के लिए कौन से मान मान्य हैं, प्रोम्पटिंग को और बढ़ाया गया है। संकेत देने के | प्रोग्रामर को यह पता लगाने की अनुमति देने के लिए कि प्रत्येक पैरामीटर के लिए कौन से मान मान्य हैं, प्रोम्पटिंग को और बढ़ाया गया है। संकेत देने के समय ऐसा करने के लिए उपयोगकर्ता कर्सर को संबंधित पैरामीटर फ़ील्ड में ले जाएगा और फिर से F4 दबाएगा। प्रणाली तब आवश्यक इनपुट के प्रकार और स्वीकार्य मूल्यों की उपलब्ध सूची का वर्णन करते हुए स्क्रीन प्रदर्शित करेगा। | ||
एक लंबा नाम दर्ज करने के लिए, या आपको अतिरिक्त मान दर्ज करने की अनुमति देने के लिए सूची का विस्तार करने के लिए, मान के बजाय धन चिह्न टाइप करें। (जैसा कि सहेजे या पुनर्स्थापित किए जाने वाले ऑब्जेक्ट के नामों को सूचीबद्ध करते समय।) | एक लंबा नाम दर्ज करने के लिए, या आपको अतिरिक्त मान दर्ज करने की अनुमति देने के लिए सूची का विस्तार करने के लिए, मान के बजाय धन चिह्न टाइप करें। (जैसा कि सहेजे या पुनर्स्थापित किए जाने वाले ऑब्जेक्ट के नामों को सूचीबद्ध करते समय।) | ||
== कमांड हेल्प == | == कमांड हेल्प == | ||
कमांड्स पर कर्सर सेंसिटिव हेल्प भी दी जा सकती है लेकिन इसकी जरूरत नहीं है। यदि | कमांड्स पर कर्सर सेंसिटिव हेल्प भी दी जा सकती है लेकिन इसकी जरूरत नहीं है। यदि सहायता प्रदान की गई है, तो कर्सर को वांछित पैरामीटर फ़ील्ड में ले जाकर और F1 (सहायता) दबाकर पैरामीटर के लिए सहायता देख सकते हैं। संपूर्ण कमांड (और इसके सभी पैरामीटर) के लिए सहायता प्राप्त करने के लिए उपयोगकर्ता प्रांप्ट डिस्प्ले पर कहीं भी F1 दबाएंगे और फिर F2 (विस्तारित सहायता) दबाएंगे। | ||
== नए आदेश बनाना == | == नए आदेश बनाना == | ||
गैर- | गैर-प्रणाली प्रोग्राम को कॉल करने के लिए नए कमांड बनाए जा सकते हैं और वे बिल्कुल इनबिल्ट वैरायटी की तरह कार्य करेंगे। कमांड परिभाषा भाषा [http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/sm14/c4157215.pdf सीएल प्रोग्रामर गाइड] में वर्णित है। | ||
नए कमांड और उनके पैरामीटर के लिए सहायता स्क्रीन बनाना | नए कमांड और उनके पैरामीटर के लिए सहायता स्क्रीन बनाना अच्छा विचार है। सभी सहायता स्क्रीन पैनल ग्रुप ऑब्जेक्ट्स (*PNLGRP) का उपयोग करती हैं और इन्हें [http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c4157150.pdf IBM AS/ में वर्णित UIM भाषा का उपयोग करके बनाया जा सकता है। 400 एप्लिकेशन डिस्प्ले प्रोग्रामिंग मैनुअल]। | ||
ऑपरेटिंग | ऑपरेटिंग प्रणाली के V5R3 की प्रारंभ में सहायता बनाने का नया, अधिक सरल तरीका जोड़ा गया: कमांड चलाएँ | ||
GENCMDDOC | GENCMDDOC CMD (MYLIB/MyCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM) | ||
कमांड द्वारा वर्णित सभी मापदंडों सहित | कमांड द्वारा वर्णित सभी मापदंडों सहित कंकाल UIM पैनल समूह स्वचालित रूप से उत्पन्न हो जाएगा। परिणाम फ़ाइल को संपादित किया जा सकता है (एसईयू, डब्लूडीएससी, आरडीआई), फिर सीआरटीपीएनएलजीआरपी कमांड के साथ संकलित किया गया है, और अंत में सीएचजीसीएमडी एचएलपीपीएनएलजीआरपी () के माध्यम से कमांड से जुड़ा हुआ है। | ||
== सही आदेश ढूँढना == | == सही आदेश ढूँढना == | ||
V7R3 में 2,262 बिल्ट-इन IBM कमांड हैं,<ref>[http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/clfinder/finder30.htm IBM.com]</ref> लेकिन | V7R3 में 2,262 बिल्ट-इन IBM कमांड हैं,<ref>[http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/clfinder/finder30.htm IBM.com]</ref> लेकिन प्रणाली के कई डिज़ाइनों के कारण उन्हें ढूंढना इतना कठिन नहीं है जो जीवन को सरल बनाते हैं। श्रम बचाने वाले ये डिज़ाइन हैं: मानकीकृत संकेताक्षर, कमांड समूहीकरण मेनू, और कमांड चयन। | ||
=== मानकीकृत संक्षिप्त रूप === | === मानकीकृत संक्षिप्त रूप === | ||
आईबीएम डेवलपर्स ने कमांड नाम बनाने के लिए | आईबीएम डेवलपर्स ने कमांड नाम बनाने के लिए उपयोग किए गए संक्षेपों को मानकीकृत किया। परिवर्तन जैसी क्रियाओं को हमेशा CHG के रूप में प्रदर्शित किया जाता है, DSP के रूप में प्रदर्शित किया जाता है, WRK के रूप में कार्य किया जाता है, CRT के रूप में बनाया जाता है, आदि। प्रोग्राम जैसे विषय हमेशा PGM होते हैं, उपयोगकर्ता USR होता है, मॉड्यूल MOD होता है, सर्वर SVR होता है, आदि। और 'VERB' और 'SUBJECT' मेन्यू में प्रणाली पर उपयोग होने वाले सब्जेक्ट, बस GO VERB या GO SUBJECT कमांड दर्ज करें। | ||
इसी तरह, नियंत्रण भाषा प्रोग्रामिंग संक्षिप्त रूप से सीएलपी था, और स्रोत प्रकार तदनुसार सीएलपी था। ILE प्रोग्रामिंग मॉडल की प्रारंभ के साथ, स्रोत प्रकार को CLLE में परिवर्तित कर दिया गया।<ref>{{cite book|last1=Meyers|first1=Bryan|title=Control Language Programming for the AS/400|date=1997|publisher=29th Street Press|isbn=9781882419760|edition=2nd }}</ref> | |||
=== कमांड ग्रुपिंग मेन्यू === | === कमांड ग्रुपिंग मेन्यू === | ||
वर्ब और सब्जेक्ट मेन्यू कमांड ग्रुपिंग मेन्यू का हिस्सा हैं। प्रत्येक तीन (या चार) अक्षर संक्षिप्त नाम के लिए | वर्ब और सब्जेक्ट मेन्यू कमांड ग्रुपिंग मेन्यू का हिस्सा हैं। प्रत्येक तीन (या चार) अक्षर संक्षिप्त नाम के लिए मेनू समर्पित है जो सीएमडी अक्षरों से शुरू होता है। इसलिए सभी CHG कमांड देखने के लिए उपयोगकर्ता GO CMDCHG कमांड को निष्पादित करेगा। प्रोग्राम कमांड के लिए मेन्यू सीएमडीपीजीएम होगा। | ||
कमांड ग्रुपिंग मेन्यू के | कमांड ग्रुपिंग मेन्यू के अतिरिक्त अन्य मेन्यू भी हैं। खाली AS/400 कमांड लाइन पर F4 दबाकर मेन्यूइंग प्रणाली के प्रारंभी बिंदु तक पहुँचा जा सकता है। | ||
=== कमांड चयन === | === कमांड चयन === | ||
यदि कोई केवल कमांड का हिस्सा जानता है या यदि तीसरे पक्ष के सॉफ़्टवेयर का उपयोग किया जा रहा है जहां कमांड एएस/400 संक्षिप्त नाम मानक के अनुरूप नहीं हैं तो आप कमांड के उस हिस्से को दर्ज करेंगे जो ज्ञात है, | यदि कोई केवल कमांड का हिस्सा जानता है या यदि तीसरे पक्ष के सॉफ़्टवेयर का उपयोग किया जा रहा है जहां कमांड एएस/400 संक्षिप्त नाम मानक के अनुरूप नहीं हैं तो आप कमांड के उस हिस्से को दर्ज करेंगे जो ज्ञात है, तारांकन चिह्न संलग्न करें (इसे बनाने के लिए) सामान्य), और एंटर दबाएं। इसके बाद प्रणाली जॉब के ऑब्जेक्ट (IBM i)#Library List में कमांड की सूची प्रदर्शित करेगा जो अभी-अभी टाइप किए गए सामान्य नामों से मेल खाता है। इसके बाद कोई भी आवश्यक आदेश की तलाश में सूची के माध्यम से पेज कर सकता है और फिर विकल्प 1 का उपयोग करके इसे चुन सकता है। | ||
पृष्ठभूमि में | पृष्ठभूमि में प्रणाली इस कार्य को करने के लिए SLTCMD कमांड का उपयोग कर रहा है। यदि कोई ऑब्जेक्ट (IBM i) में सभी कमांड का चयन करना चाहता है तो इस कमांड को प्रांप्ट करें और विशेष मान *ALL दर्ज करें। | ||
== नमूना कोड == | == नमूना कोड == | ||
निम्नलिखित सीएल प्रोग्रामिंग का | निम्नलिखित सीएल प्रोग्रामिंग का नमूना है। कार्यक्रम अंतःक्रियात्मक रूप से जूलियन से एमडीवाई और इसके विपरीत तारीखों को परिवर्तित करता है। परिणाम टर्मिनल की लाइन 24 पर प्रदर्शित होते हैं। यह दो मापदंडों को स्वीकार करता है। <code>&IN</code> e> पैरामीटर जो कनवर्ट की जाने वाली दिनांक स्ट्रिंग है। यदि जूलियन स्ट्रिंग यह YYNNN प्रारूप में होनी चाहिए जहां YY वर्ष संख्या है और NNN वर्ष की दिन संख्या है। यदि कोई MDY स्ट्रिंग MMDDYY प्रारूप में होनी चाहिए। दूसरा पैरामीटर है <code>&TYP</code> किस प्रकार की तिथि को परिवर्तित किया जाना है। यह 'J' (जूलियन) या 'M' (एमडीवाई) होना चाहिए। उदाहरण के लिए: आज्ञा <code>CALL PGM(ICVTDATC) PARM('04180' 'M')</code> जूलियन दिनांक 04180 को 062804 (28 जून, 2004) में परिवर्तित कर देगा। | ||
PGM (&IN &TYP) | |||
DCL &IN *CHAR 6 | |||
DCL &OUT *CHAR 8 | |||
DCL &TYP *CHAR 1 | |||
IF (&TYP = J) + | |||
DO | |||
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) + | |||
TOFMT(*JUL) TOSEP(*NONE) | |||
ENDDO | |||
ELSE IF (&TYP = M) + | |||
DO | |||
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) + | |||
TOFMT(*MDY) TOSEP(*NONE) | |||
ENDDO | |||
SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) + | |||
MSGTYPE(*COMP) | |||
ENDPGM | |||
== यह भी देखें == | == यह भी देखें == |
Revision as of 21:34, 14 February 2023
Paradigm | imperative |
---|---|
द्वारा डिज़ाइन किया गया | IBM |
Developer | IBM |
पहली प्रस्तुति | 1978 |
ओएस | Control Program Facility, IBM i |
लाइसेंस | Proprietary |
Influenced by | |
Job Control Language, PL/I | |
Influenced | |
Windows PowerShell |
नियंत्रण भाषा (सीएल) मूल रूप से आईबीएम द्वारा प्रणाली / 38 नियंत्रण कार्यक्रम सुविधा के लिए बनाई गई स्क्रिप्टिंग भाषा है[1] और बाद में OS/400 (जिसे अब IBM i के नाम से जाना जाता है) में उपयोग किया गया। यह आईबीएम नौकरी नियंत्रण भाषा से मिलता जुलता है और इसमें कमांड ऑब्जेक्ट्स (*सीएमडी) का सेट होता है, जिसका उपयोग पारंपरिक कार्यक्रमों को शुरू करने या उन कार्यक्रमों के बारे में सहायता पाने के लिए किया जाता है। सीएल का उपयोग सीएल प्रोग्राम (खोल स्क्रिप्ट के अनुरूप) बनाने के लिए भी किया जा सकता है जहां अतिरिक्त कमांड हैं जो प्रोग्राम जैसी कार्यक्षमता (आईएफ/ईएलएसई, घोषणा (कंप्यूटर विज्ञान), फ़ाइल इनपुट इत्यादि) प्रदान करते हैं।
चूंकि CL प्रणाली प्रशासन के लिए स्क्रिप्टिंग भाषा है, इसका उपयोग मुख्य रूप से संकलित प्रोग्राम बनाने के लिए किया जाता है। SBMDBJOB कमांड के माध्यम से व्याख्या की गई CL स्क्रिप्ट का उपयोग [2] वास्तव में अत्यंत सीमित है।
जबकि आईबीएम डेवलपर्स द्वारा प्रोग्रामों को संकलित करने, डेटा का बैकअप लेने, प्रणाली कॉन्फ़िगरेशन बदलने, प्रणाली ऑब्जेक्ट विवरण प्रदर्शित करने, या उन्हें हटाने जैसे प्रणाली स्तर के कार्यों को करने के लिए हजारों आदेश लिखे गए थे, आदेश प्रणाली स्तर की चिंताओं तक सीमित नहीं हैं और उपयोगकर्ता भी अनुप्रयोगों के लिए तैयार किए जाते हैं।
कमांड और प्रोग्राम
पैरामीटर (कंप्यूटर विज्ञान) (कमांड-लाइन लाजिक) सभी पारंपरिक प्रणाली/38 और एएस/400 कार्यक्रमों की मुख्य प्रक्रियाओं में परिभाषित हार्ड कोडित सूचियां हैं जो पैरामीटर से बने होते हैं जो संख्यात्मक, अल्फान्यूमेरिक, बूलियन इत्यादि हो सकते हैं और जिस क्रम में पैरामीटर पारित किए जाते हैं वह महत्वपूर्ण है। यह यूनिक्स और डॉस दुनिया से बड़ा अंतर है जहां यूनिक्स शैल स्क्रिप्ट और सी (प्रोग्रामिंग भाषा) में पैरामीटर सूची वर्ण पॉइंटर्स का सेट या सरणी है और अधिकतर पैरामीटर स्थितित्मक रूप से निर्भर नहीं होते हैं।
इस समस्या का डेवलपर का समाधान कमांड ऑब्जेक्ट (* सीएमडी) था। जबकि आदेश पर पैरामीटर किसी भी क्रम में निर्दिष्ट किए जा सकते हैं, प्रत्येक पैरामीटर को प्रोग्राम के विशिष्ट क्रम में पारित करने के लिए परिभाषित किया गया है। प्रोग्रामर अन्य बातों के अतिरिक्त, पैरामीटर के डेटा प्रकार, अद्वितीय पैरामीटर नाम, वर्णनात्मक पाठ (संकेत देने के लिए), डिफ़ॉल्ट मान (केवल निष्पादन के समय पैरामीटर निर्दिष्ट नहीं होने पर उपयोग किया जाता है) को भी परिभाषित कर सकता है, यदि मान निश्चित सीमा तक सीमित हैं सेट या रेंज, यदि प्रोग्राम को कॉल करने से पहले दर्ज किए गए डेटा को दूसरे मान में परिवर्तन किया जाना चाहिए।
जब उपयोगकर्ता टाइप करता है या कमांड का संकेत देता है और एंटर कुंजी दबाता है, तो इसकी सबसे बुनियादी कमांड कॉल करने के लिए एकल प्रोग्राम का नाम देती है। कमांड उपयोगकर्ता द्वारा टाइप किए गए सभी पैरामीटर लेता है, और जो उपयोगकर्ता द्वारा टाइप नहीं किया जाता है, और पैरामीटर सूची बनाता है जो प्रोग्राम को कॉल करने पर पास करता है।
सिंटेक्स
अधिक सरलीकृत सीएल कमांड सिंटैक्स के लिए बैकुस-नौर फॉर्म को निम्नानुसार परिभाषित किया जाएगा:
<CL-command> ::= command-name [<positional-parameter-list>] [<named-parameter-list>]
<positional-parameter-list> ::= <parameter-value> [<positional-parameter-list>]
<named-parameter-list> ::= parameter-name "(" <parameter-element-list> ")" [<named-parameter-list>]
<parameter-element-list> ::= <parameter-value> [<parameter-element-list>]
<parameter-value> ::= CL-name |
qualified-CL-name |
"*"special-value |
generic-CL-name"*" |
"'"alphanumeric-value"'" |
numeric-value |
"X'"hexadecimal-value"'"
नाम में समाप्त होने वाले आइटम ऑब्जेक्ट (आईबीएम i) नामकरण परंपराओं का पालन करते हैं, जो सामान्यतः बोलते हैं, इसका मतलब है कि नाम अक्षर से शुरू होता है और लंबाई में दस वर्णों तक हो सकता है। (सीएल आदेश भी केस-संवेदी हैं।)
विशिष्ट सीएल कमांड का अच्छा उदाहरण नीचे दिया गया 'चेंज प्रोग्राम' (सीएचजीपीजीएम) कमांड है:
CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('My program.')
उपरोक्त कमांड प्रोग्राम को चार पैरामीटर पास कर रहा है जो प्रोग्राम प्रोसेसिंग को बदलता है और वे हैं:
- MYPGM: स्थितीय पैरामीटर (PGM), और केवल आवश्यक पैरामीटर। इस स्थिति में यह बदला जा रहा कार्यक्रम का नाम है। स्थितीय पैरामीटर हमेशा पहले होते हैं। बार नामित पैरामीटर प्रकट होने के बाद सभी पैरामीटर जो अनुसरण करते हैं, उन्हें नामित पैरामीटर होना चाहिए।
- ऑप्टिमाइज़ (* पूर्ण): नामित पैरामीटर जो तत्व को निर्दिष्ट करता है जो विशेष मान है। इस स्थिति में यह प्रोग्राम को पूरी तरह से अनुकूलित करने के लिए बदल देगा।
- RMVOBS(*BLKORD *PRCORD): कई विशेष मूल्यों को निर्दिष्ट करने वाला नामित पैरामीटर (अवलोकनशीलता हटाएं)। इस स्थिति में इसे प्रोग्राम से दो प्रकार के प्रोफाइलिंग डेटा को हटाने के लिए कह रहा है।
- पाठ ('मेरा कार्यक्रम।'): एकल अल्फ़ान्यूमेरिक मान निर्दिष्ट करने वाला अन्य नामित पैरामीटर। इस स्थिति में यह कार्यक्रम के वर्णनात्मक पाठ को बदल रहा है।
वास्तव में प्रणाली ऊपर बताए गए चार पैरामीटर से कहीं अधिक पैरामीटर पास करेगा। ऐसा इसलिए है क्योंकि शेष सीएचजीपीजीएम कमांड के पैरामीटर निर्दिष्ट नहीं किए गए थे, इसलिए इसके बजाय डिफ़ॉल्ट मान पारित किए जाएंगे। इस पर प्रत्येक पैरामीटर के लिए, PGM पैरामीटर को छोड़कर, वह डिफ़ॉल्ट *SAME है, जिसका अर्थ है कि इसे परिवर्तित न करें।
संकेत
कमांड टाइप करके और F4 फ़ंक्शन कुंजी दबाकर सभी सीएल कमांड को सीधे कमांड लाइन से या सीएल प्रोग्राम सोर्स कोड के भीतर संकेत दिया जा सकता है। OS/400 कमांड को टाइप करके भी संकेत दिया जा सकता है ? आज्ञा से पहले। (यह इंटरैक्टिव प्रोग्राम में उपयोगी है जो कमांड स्ट्रिंग को इंगित करता है, पहले से ही कुछ मूल्यों में भरा हुआ है।)
प्रणाली तब पैरामीटर के सेट के साथ स्क्रीन पेश करेगा जिसे प्रोग्राम स्वीकार/आवश्यक करता है (आवश्यक पैरामीटर सामान्यतः हाइलाइट किए जाते हैं)।
आवश्यक पैरामीटर पहले सूचीबद्ध हैं, और प्रणाली द्वारा आपूर्ति किए गए डिफ़ॉल्ट मान वाले पैरामीटर सबसे अंत में सूचीबद्ध हैं। सभी पैरामीटर देखने के लिए, F10 दबाएं। यदि किसी विकल्प के लिए और चयन की आवश्यकता होती है, तो वे संकेतित होते हैं जब आप उस पैरामीटर के लिए उस मान का चयन करते हैं, जो ऑनस्क्रीन प्रदर्शित होता है।
प्रोग्रामर को यह पता लगाने की अनुमति देने के लिए कि प्रत्येक पैरामीटर के लिए कौन से मान मान्य हैं, प्रोम्पटिंग को और बढ़ाया गया है। संकेत देने के समय ऐसा करने के लिए उपयोगकर्ता कर्सर को संबंधित पैरामीटर फ़ील्ड में ले जाएगा और फिर से F4 दबाएगा। प्रणाली तब आवश्यक इनपुट के प्रकार और स्वीकार्य मूल्यों की उपलब्ध सूची का वर्णन करते हुए स्क्रीन प्रदर्शित करेगा।
एक लंबा नाम दर्ज करने के लिए, या आपको अतिरिक्त मान दर्ज करने की अनुमति देने के लिए सूची का विस्तार करने के लिए, मान के बजाय धन चिह्न टाइप करें। (जैसा कि सहेजे या पुनर्स्थापित किए जाने वाले ऑब्जेक्ट के नामों को सूचीबद्ध करते समय।)
कमांड हेल्प
कमांड्स पर कर्सर सेंसिटिव हेल्प भी दी जा सकती है लेकिन इसकी जरूरत नहीं है। यदि सहायता प्रदान की गई है, तो कर्सर को वांछित पैरामीटर फ़ील्ड में ले जाकर और F1 (सहायता) दबाकर पैरामीटर के लिए सहायता देख सकते हैं। संपूर्ण कमांड (और इसके सभी पैरामीटर) के लिए सहायता प्राप्त करने के लिए उपयोगकर्ता प्रांप्ट डिस्प्ले पर कहीं भी F1 दबाएंगे और फिर F2 (विस्तारित सहायता) दबाएंगे।
नए आदेश बनाना
गैर-प्रणाली प्रोग्राम को कॉल करने के लिए नए कमांड बनाए जा सकते हैं और वे बिल्कुल इनबिल्ट वैरायटी की तरह कार्य करेंगे। कमांड परिभाषा भाषा सीएल प्रोग्रामर गाइड में वर्णित है।
नए कमांड और उनके पैरामीटर के लिए सहायता स्क्रीन बनाना अच्छा विचार है। सभी सहायता स्क्रीन पैनल ग्रुप ऑब्जेक्ट्स (*PNLGRP) का उपयोग करती हैं और इन्हें IBM AS/ में वर्णित UIM भाषा का उपयोग करके बनाया जा सकता है। 400 एप्लिकेशन डिस्प्ले प्रोग्रामिंग मैनुअल।
ऑपरेटिंग प्रणाली के V5R3 की प्रारंभ में सहायता बनाने का नया, अधिक सरल तरीका जोड़ा गया: कमांड चलाएँ
GENCMDDOC CMD (MYLIB/MyCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM)
कमांड द्वारा वर्णित सभी मापदंडों सहित कंकाल UIM पैनल समूह स्वचालित रूप से उत्पन्न हो जाएगा। परिणाम फ़ाइल को संपादित किया जा सकता है (एसईयू, डब्लूडीएससी, आरडीआई), फिर सीआरटीपीएनएलजीआरपी कमांड के साथ संकलित किया गया है, और अंत में सीएचजीसीएमडी एचएलपीपीएनएलजीआरपी () के माध्यम से कमांड से जुड़ा हुआ है।
सही आदेश ढूँढना
V7R3 में 2,262 बिल्ट-इन IBM कमांड हैं,[3] लेकिन प्रणाली के कई डिज़ाइनों के कारण उन्हें ढूंढना इतना कठिन नहीं है जो जीवन को सरल बनाते हैं। श्रम बचाने वाले ये डिज़ाइन हैं: मानकीकृत संकेताक्षर, कमांड समूहीकरण मेनू, और कमांड चयन।
मानकीकृत संक्षिप्त रूप
आईबीएम डेवलपर्स ने कमांड नाम बनाने के लिए उपयोग किए गए संक्षेपों को मानकीकृत किया। परिवर्तन जैसी क्रियाओं को हमेशा CHG के रूप में प्रदर्शित किया जाता है, DSP के रूप में प्रदर्शित किया जाता है, WRK के रूप में कार्य किया जाता है, CRT के रूप में बनाया जाता है, आदि। प्रोग्राम जैसे विषय हमेशा PGM होते हैं, उपयोगकर्ता USR होता है, मॉड्यूल MOD होता है, सर्वर SVR होता है, आदि। और 'VERB' और 'SUBJECT' मेन्यू में प्रणाली पर उपयोग होने वाले सब्जेक्ट, बस GO VERB या GO SUBJECT कमांड दर्ज करें।
इसी तरह, नियंत्रण भाषा प्रोग्रामिंग संक्षिप्त रूप से सीएलपी था, और स्रोत प्रकार तदनुसार सीएलपी था। ILE प्रोग्रामिंग मॉडल की प्रारंभ के साथ, स्रोत प्रकार को CLLE में परिवर्तित कर दिया गया।[4]
कमांड ग्रुपिंग मेन्यू
वर्ब और सब्जेक्ट मेन्यू कमांड ग्रुपिंग मेन्यू का हिस्सा हैं। प्रत्येक तीन (या चार) अक्षर संक्षिप्त नाम के लिए मेनू समर्पित है जो सीएमडी अक्षरों से शुरू होता है। इसलिए सभी CHG कमांड देखने के लिए उपयोगकर्ता GO CMDCHG कमांड को निष्पादित करेगा। प्रोग्राम कमांड के लिए मेन्यू सीएमडीपीजीएम होगा।
कमांड ग्रुपिंग मेन्यू के अतिरिक्त अन्य मेन्यू भी हैं। खाली AS/400 कमांड लाइन पर F4 दबाकर मेन्यूइंग प्रणाली के प्रारंभी बिंदु तक पहुँचा जा सकता है।
कमांड चयन
यदि कोई केवल कमांड का हिस्सा जानता है या यदि तीसरे पक्ष के सॉफ़्टवेयर का उपयोग किया जा रहा है जहां कमांड एएस/400 संक्षिप्त नाम मानक के अनुरूप नहीं हैं तो आप कमांड के उस हिस्से को दर्ज करेंगे जो ज्ञात है, तारांकन चिह्न संलग्न करें (इसे बनाने के लिए) सामान्य), और एंटर दबाएं। इसके बाद प्रणाली जॉब के ऑब्जेक्ट (IBM i)#Library List में कमांड की सूची प्रदर्शित करेगा जो अभी-अभी टाइप किए गए सामान्य नामों से मेल खाता है। इसके बाद कोई भी आवश्यक आदेश की तलाश में सूची के माध्यम से पेज कर सकता है और फिर विकल्प 1 का उपयोग करके इसे चुन सकता है।
पृष्ठभूमि में प्रणाली इस कार्य को करने के लिए SLTCMD कमांड का उपयोग कर रहा है। यदि कोई ऑब्जेक्ट (IBM i) में सभी कमांड का चयन करना चाहता है तो इस कमांड को प्रांप्ट करें और विशेष मान *ALL दर्ज करें।
नमूना कोड
निम्नलिखित सीएल प्रोग्रामिंग का नमूना है। कार्यक्रम अंतःक्रियात्मक रूप से जूलियन से एमडीवाई और इसके विपरीत तारीखों को परिवर्तित करता है। परिणाम टर्मिनल की लाइन 24 पर प्रदर्शित होते हैं। यह दो मापदंडों को स्वीकार करता है। &IN
e> पैरामीटर जो कनवर्ट की जाने वाली दिनांक स्ट्रिंग है। यदि जूलियन स्ट्रिंग यह YYNNN प्रारूप में होनी चाहिए जहां YY वर्ष संख्या है और NNN वर्ष की दिन संख्या है। यदि कोई MDY स्ट्रिंग MMDDYY प्रारूप में होनी चाहिए। दूसरा पैरामीटर है &TYP
किस प्रकार की तिथि को परिवर्तित किया जाना है। यह 'J' (जूलियन) या 'M' (एमडीवाई) होना चाहिए। उदाहरण के लिए: आज्ञा CALL PGM(ICVTDATC) PARM('04180' 'M')
जूलियन दिनांक 04180 को 062804 (28 जून, 2004) में परिवर्तित कर देगा।
PGM (&IN &TYP) DCL &IN *CHAR 6 DCL &OUT *CHAR 8 DCL &TYP *CHAR 1 IF (&TYP = J) + DO CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) + TOFMT(*JUL) TOSEP(*NONE) ENDDO ELSE IF (&TYP = M) + DO CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) + TOFMT(*MDY) TOSEP(*NONE) ENDDO SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) + MSGTYPE(*COMP)
ENDPGM
यह भी देखें
- क्यूशेल
- रेक्स
संदर्भ
- ↑ "IBM System/38 Control Language Reference Manual" (PDF). IBM. 1982-09-10. Retrieved 2021-03-24.
- ↑ itjungle.com
- ↑ IBM.com
- ↑ Meyers, Bryan (1997). Control Language Programming for the AS/400 (2nd ed.). 29th Street Press. ISBN 9781882419760.