আইবিএম ডিএফএসআরটি, 71, 72 বা 80 টি অক্ষরের 11 3 লাইন
OPTION COPY
OUTFIL REPEAT=12,OVERLAY=(5:SEQNUM,2,ZD,5,2,1,8,Y4T,LASTDAYM,TOJUL=Y4T*
,9,7,Y4T,ADDDAYS,+1,TOJUL=Y4T,1:16,7,Y4T,PREVDSUN,TOGREG=Y4T(-),12X)
কলামার আউটপুট ফর্ম্যাট সহ দুটি উত্তর সময়ের পরীক্ষায় দাঁড়িয়েছে। এটি আমাকে একটি "লুপ" দেয়, এর মধ্যে আউটফিল পুনরায় = বর্তমান রেকর্ডটি বহুবার অনুলিপি করে।
মানটি পেতে বিভিন্ন কৌশল, যা দীর্ঘ বলে মনে হয় তবে সংক্ষিপ্ত কারণ আমি পরের বছরে দ্বাদশ রেকর্ডের সাথে মোকাবিলা করার কোনও শর্তহীন পদ্ধতিতে কাজ করতে পারি না, এবং এটি শর্তসাপেক্ষে IFTHEN=(WHEN=, দ্বিগুণ এবং অন্য কিছু সামগ্রী সহ তৈরি করি । দোলাতে লাভ (মাসের প্রথমটি এটি করার সহজতম উপায়) রাউন্ডআউটআউটগুলি (নির্দিষ্ট সিনট্যাক্স প্রয়োজনীয়তা) থেকে খুব বেশি হারাতে হয়।
এটি মাসের শেষ দিনটি খুঁজে পেতে একটি ইনবিল্ট ফাংশন (ডিএফএসআরটি-তে সমস্ত ফাংশন অন্তর্নির্মিত) ব্যবহার করে। তারপরে নিম্নলিখিত মাসের প্রথমটিতে পেতে একদিন (ফাংশন) যুক্ত করুন এবং পূর্বের রবিবারটি পাওয়ার জন্য PREVDSUN ফাংশনটি ব্যবহার করুন (যা সর্বদা আগের মাসের শেষ রবিবার হবে, আগের মতো)।
বছরটিকে (ইনপুট) বৈধ তারিখে পরিণত করার সময়, মাসের জন্য একটি দুই-অঙ্কের ক্রম সংখ্যা ব্যবহৃত হয় এবং সেই মানটিও সেই দিনের জন্য অনুলিপি করা হয়, যেহেতু প্রারম্ভিক বিন্দু যতক্ষণ বৈধ ততক্ষণ আমাদের বিবেচনা করে না does শুরুতে মাসের শেষ দিন পরে: এর 5,2চেয়ে সংক্ষিপ্ত C'01'।
বিস্তারিত এখানে:
বিকল্প কপি - আউটপুট থেকে ইনপুট ফাইল অনুলিপি করুন
আউটফিল - বিভিন্ন নির্বাচন এবং ফর্ম্যাট সহ একাধিক আউটপুট ফাইলগুলিকে মঞ্জুরি দেওয়ার জন্য, বিন্যাসিত প্রতিবেদন তৈরি করা। সংক্ষিপ্ত পছন্দ INRECহিসাবে ব্যবহার কারণ REPEAT=।
পুনরায় = 12 - প্রতিটি রেকর্ডের 12 অনুলিপি তৈরি করুন। এই উদাহরণে, SEQNUM এর কারণে কেবলমাত্র একটি ইনপুট রেকর্ড (পূর্ববর্তী সংস্করণের বিপরীতে) থাকতে পারে।
5: - রেকর্ডের 5 কলামে শুরু করুন।
SEQNUM, 2, জেডডি - সিকোয়েন্স নম্বর, এক, দুটি অঙ্ক থেকে শুরু করতে ডিফল্ট, "জোনেড দশমিক" (স্বাক্ষরযুক্ত, যা তারা হবে, অক্ষর হিসাবে একই হবে)।
1,8 - 8 টি বর্তমান অবস্থানের দৈর্ঘ্যের জন্য বাইট 1 টি (9)। এটি কারণ যে ওয়াই 4 টি 8 টি দেখতে হবে অন্যথায় একটি পৃথক তারিখের ফর্ম্যাট ব্যবহার করা হবে।
ওয়াই 4 টি - সিসিআইএমডিডি-ফর্ম্যাট তারিখ (তত্ক্ষণাত 8 এর সামনে এর কারণে)।
লাস্টডেম - মাসের শেষ দিন (সপ্তাহ, ত্রৈমাসিক এবং বছরেরও সম্ভবত)।
তোজুল = - তারিখ ফাংশনের জন্য আউটপুট তারিখ-রূপান্তর (তোজুল টোগ্রেগের চেয়ে একটি অক্ষর কম)
9,7 - এখন এটি 7 দীর্ঘ, ওয়াই 4 টি সিসিওয়াইডিডিডি হতে চলেছে।
ADDDAYS - বেশ কয়েকটি দিন যুক্ত করে, পরবর্তী মাস / বছরে চলে গেলে স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয় (এটিও ADDMONS এবং ADDYEARS হতে পারে)
প্রিভিডসুন - জুলিয়ান তারিখটি এসেছিল, পূর্ববর্তী রবিবারটি অবস্থিত, "-" পৃথককারী সহ সঠিক আউটপুট ফর্ম্যাটটি পেতে টোগ্রেগ (আপনার বিভাজকের মতো কিছু হতে পারে)
12 এক্স - ফাঁকা বিষয়বস্তু পরিষ্কার করার জন্য যা আমাদের এটি এত অল্প সময়ে এটি করার অনুমতি দিয়েছে
2014 এর জন্য উপরের থেকে আউটপুটটি হ'ল:
2014-01-26
2014-02-23
2014-03-30
2014-04-27
2014-05-25
2014-06-29
2014-07-27
2014-08-31
2014-09-28
2014-10-26
2014-11-23
2014-12-28
SORT কে কী করতে হবে তা বলার জন্য কিছু দরকার। কোনও ডিফল্ট নেই। OPTION COPYসবচেয়ে সংক্ষিপ্ত, SORT FIELDS=COPYসমান তবে লম্বা।
এই বার নিজেই কাজটি হয়েছে OUTFIL(রিপাইটি ব্যবহারের অনুমতি দেওয়ার জন্য)। কাজের কোডটি তর্কযোগ্যভাবে 160 (2 * 80), 144 (2 * 72), 140 (72 + 69), বা 138 (70 + 68) (নেতৃস্থানীয় ফাঁকা বাদ দেওয়া, জোর করে চালিয়ে যাওয়া এবং ফাঁকা ফাঁকা স্থানগুলি বাদ দিয়ে) is
প্রদত্ত যে প্রাপক তারা কী করছে তা জানতে হবে, আমি মনে করি যে আমি বলতে পারি যে ডিএফএসআরটি কোডটি ১৯০০ সাল থেকে যে কোনও বছরের জন্য প্রতিমাসের শেষ রবিবারের তালিকা তৈরি করতে (যে বছর 0001 থেকে চলবে, তবে আমি গবেষণাটিকে এড়িয়ে চলেছি) ভাল) 9999 অবধি (যদিও ডিএফএসওআরটি 9999 সাল পর্যন্ত সমর্থন করে তবে পূর্ববর্তী সমাধানটি 9999 সালে কাজ করবে না যেহেতু 12 তম তারিখটি পরের বছরে যায়) টুইট করা যেতে পারে।
কোডটি এত দীর্ঘ কেন, যদি বিশেষত অ্যাপ্লিকাল ইনবিল্ট-ফাংশনগুলি থাকে?
ক্ষেত্র-সংজ্ঞা সংক্ষিপ্ত। কোনও ক্ষেত্র কেবল তাত্ক্ষণিক ব্যবহারের জন্য ডেটা (যা একটি রেকর্ড) এর মধ্যে একটি নির্দিষ্ট অবস্থান হিসাবে সংজ্ঞায়িত হয়। এটি অন্য কোনও উপায়ে বলতে গেলে ক্ষেত্রগুলি যেমন হিসাবে সংজ্ঞায়িত হয় না, তবে প্রতিটি ব্যবহারের জন্য এবং কেবল ব্যবহারের জন্য সংজ্ঞায়িত হয়। তারিখ ফাংশনগুলি জানতে হবে যে উত্সটির জন্য তারিখের (অনেকগুলির) ফর্ম্যাটগুলি ব্যবহৃত হয় এবং আউটপুট অবশ্যই একটি তারিখের ফর্ম্যাটে থাকে, যাতে এটি নির্দিষ্ট করতে হবে।
এখন আমাদের জুলিয়ান ডেট হয়েছে .... টিবিসি?
OPTION COPY
INREC OVERLAY=(1,4,C'0201',1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8*
,94:C'1',89:1,4,ZD,ADD,+1,ZD,LENGTH=4,14:C'3',22:C'4',30:C'5',38:C'6',*
46:C'7',54:C'8',62:C'9',69:C'10',77:C'11',85:C'12',127:X,89,8,Y4T,PREV*
DSUN,TOGREG=Y4T(-),116:X,81,8,Y4T,PREVDSUN,TOGREG=Y4T(-),105:X,73,8,Y4*
T,PREVDSUN,TOGREG=Y4T(-),94:X,65,8,Y4T,PREVDSUN,TOGREG=Y4T(-),83:X,57,*
8,Y4T,PREVDSUN,TOGREG=Y4T(-),72:X,49,8,Y4T,PREVDSUN,TOGREG=Y4T(-),61:X*
,41,8,Y4T,PREVDSUN,TOGREG=Y4T(-),50:X,33,8,Y4T,PREVDSUN,TOGREG=Y4T(-),*
39:X,25,8,Y4T,PREVDSUN,TOGREG=Y4T(-),28:X,17,8,Y4T,PREVDSUN,TOGREG=Y4T*
(-),17:X,09,8,Y4T,PREVDSUN,TOGREG=Y4T(-),1:1,8,Y4T,PREVDSUN,TOGREG=Y4T*
(-),11:X,18,120,6X)
কিছু দরকার JCL
//LASTSUNG EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTOUT DD SYSOUT=*
//SYSIN DD *
এবং একটি ইনপুট ফাইল (জেসিএল এর অন্য একটি লাইন এবং তিনটি ডাটা স্ট্রিম আইটেম):
//SORTIN DD *
2014
1900
2000
উত্পাদন:
2014-01-26 2014-02-23 2014-03-30 2014-04-27 2014-05-25 2014-06-29 2014-07-27 2014-08-31 2014-09-28 2014-10-26 2014-11-30 2014-12-28
1900-01-28 1900-02-25 1900-03-25 1900-04-29 1900-05-27 1900-06-24 1900-07-29 1900-08-26 1900-09-30 1900-10-28 1900-11-25 1900-12-30
2000-01-30 2000-02-27 2000-03-26 2000-04-30 2000-05-28 2000-06-25 2000-07-30 2000-08-27 2000-09-24 2000-10-29 2000-11-26 2000-12-31
প্রকৃতপক্ষে 9999 সাল পর্যন্ত কাজ করবে।
ডিএফএসএআরটি হ'ল আইবিএমের মেইনফ্রেম বাছাইয়ের পণ্য। ডেটা ম্যানিপুলেটেড করা যায়, তবে যেহেতু বাছাই কী এবং প্রকারগুলি প্রায়শই বড় এবং দীর্ঘস্থায়ী হয়, তাই ডিএফএসএআরটি নিয়ন্ত্রণ কার্ডগুলিতে কোনও লুপিং কনস্ট্রাক্ট থাকে না, তাই আমরা কোনও লুপে একটি SORT রাখতে পারি না। গল্ফের মতো কাজের জন্য জিনিসগুলিকে কিছুটা দীর্ঘায়িত করে তোলে।
কেন উত্তর পোস্ট করবেন, কারণ ডিএফএসওআরটির একটি PREVDdayফাংশন রয়েছে। তাই এক মাসে শেষ রবিবার সহজ। এটি পরের রবিবার (PREVDSUN) পরবর্তী মাসের প্রথম দিন পর্যন্ত।
এটি একটি "অপরেন্ড" (ওভারলি) এর মধ্যে করাও মজাদার ছিল, কিছুটা এর মধ্যে sprintfবা এর মতোই কিছু করার মতো।
এখানে এটি নিয়ন্ত্রিত:
OPTION COPY
INREC OVERLAY=(1,4,C'0201',1,8,1,8,1,8,1,8,1,8,1,8,
1,8,1,8,1,8,1,8,
1,8,94:C'1',89:1,4,ZD,ADD,+1,ZD,LENGTH=4,
14:C'3',22:C'4',30:C'5',38:C'6',46:C'7',54:C'8',
62:C'9',69:C'10',77:C'11',85:C'12',
127:X,89,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
116:X,81,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
105:X,73,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
94:X,65,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
83:X,57,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
72:X,49,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
61:X,41,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
50:X,33,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
39:X,25,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
28:X,17,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
17:X,09,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
1:1,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
11:X,18,120,6X)
পুরোপুরি অপব্যবহার না করেও, এই সমস্তটিকে একটি ওভারলেতে ছড়িয়ে দেওয়ার চেষ্টা করা স্বাভাবিক হবে না, এবং কিছু আপাতদৃষ্টিতে অপ্রয়োজনীয় জিনিস রয়েছে যা এটি সমস্তকে একটি ওভারেরিতে যেতে দেয়। গল্ফ করার জন্য কিছু জায়গা রয়েছে তবে এটি যেহেতু কেবলমাত্র একটি লাইন সরিয়ে ফেলবে, তাই আমি প্রলোভিত হই না।
প্রতিটি রেকর্ডের জন্য INREC প্রক্রিয়া করা হয়।
ওভারলে একটি বিদ্যমান রেকর্ডের সামগ্রী পরিবর্তন করার অনুমতি দেয়। প্রক্রিয়াটিতে রেকর্ডটি যদি তার দৈর্ঘ্যের বাইরেও প্রসারিত হয়, তবে এটি কোনও সমস্যা নয়।
1,4 বছর আসছে। এটির সাথে 020 এর আক্ষরিক সংযোজন রয়েছে এবং তারপরে ক্রমাগত 1,8 টি এটিকে 11 বার পুনরাবৃত্তি করে one৯ বাইটের একটি দীর্ঘ চক দিতে,
বর্ধিত বর্তমান রেকর্ডের দ্বাদশতম বছর এটিতে 1 যুক্ত হয় এবং এর মাসটি 1 (জানুয়ারী) এ পরিণত হয়।
বাকি 10 মাস 3 থেকে 11 এর মধ্যে পরিবর্তন করা হয়।
তারপরে 12 টি রয়েছে, এই ধরণের জিনিসটির বিপরীত ক্রমে (ওভারলাইয়ের কারণে):
127:X,89,8,Y4T,PREVDSUN,TOGREG=Y4T(-),
এন: রেকর্ডে একটি কলাম নম্বর। এক্স একটি ফাঁকা সন্নিবেশ করায়। 89,8 সেই কলাম / দৈর্ঘ্য থেকে ডেটা নেয়, ওয়াই 4 টি এটিকে সিসিওয়াইএমএমডিডি তারিখ হিসাবে বিবেচনা করে, প্রিভিডিএসএম আগের রবিবারে কাজ করে, টগ্রেগ = ওয়াই 4 টি (-) এটিকে গ্রেগরিয়ান সিসিওয়াই-এমএম-ডিডি তারিখ হিসাবে প্রকাশ করে।
কারণ আপনি যদি আবর্জনা পেয়ে থাকেন তবে যদি ওভারলাইয়ের কোনও নির্দিষ্ট অংশের উত্স এবং লক্ষ্যটি ধ্বংসাত্মকভাবে ওভারল্যাপ হয় তবে চূড়ান্ত পুনরুদ্ধার 11:X,18,120,6X)এবং কিছুটা গণ্ডগোল ।
ম্যানুয়ালগুলি এবং কাগজপত্রগুলি এখানে পাওয়া যাবে: http://www-01.ibm.com/support/docview.wss?uid=isg3T7000080 , এবং 900+ পৃষ্ঠার ডিএফএসওআরটি অ্যাপ্লিকেশন প্রোগ্রামিং গাইড অন্তর্ভুক্ত রয়েছে।
সমস্ত আইবিএম পণ্যগুলির মতো সমস্ত ম্যানুয়াল বিনামূল্যে জন্য পাওয়া যায় (খুব ব্যয়বহুল একটি অল্প পরিমাণ ব্যতীত যা বিশ্বের খুব কম সংখ্যক লোক এমনকি বোঝার ভান করে)।
সমস্ত ডিএফএসএআরটি নিয়ন্ত্রণ কার্ড অবশ্যই একটি ফাঁকা দিয়ে শুরু করা উচিত start 72 কলামটি কেবল ধারাবাহিকতার জন্য ব্যবহৃত হয় (কোনও শূন্যস্থানই এটি করবে তবে * প্রচলিত) is 72 কলামের পরে সিকোয়েন্স নম্বর অঞ্চলটি অনুসরণ করা হবে যা প্রতিটি রেকর্ডকে 80 বাইট করে ignored
সমাধান আসতে পারে আরও কয়েক দম্পতি, সম্ভবত।