كيف يمكنني نسخ عضو مع برنامج دفعة REXX / CLIST (لا ISPF)؟
سؤال
ضمن z / OS، أريد أن أكتب البرنامج النصي Rexx أو Clist لنسخ بيانات متتالية واحدة مضبوطا على آخر ثم قم بتشغيل برنامج نصي آخر (Rexx). يتوقع البرنامج النصي الآخر وجود SDS محددة وأريد أن أكون قادرا على نسخ أحد الخيارات العديدة لهذا العضو قبل تشغيل البرنامج النصي الثاني. هذا من TSO، لذلك ليس لدي حق الوصول إلى أي من الأشياء ISPF الهوى.
لذلك، أساسا:
Copy 'level1.level2.name.type1' to 'level1.level2.name'
runother p1 p2 p3
ال runother
يستخدم برنامج Rexx Script 'Level1.level2.name' للقيام بسحره الخاص - أنا فقط توفير واحد مختلف لكل من إمكانياتي.
لذلك أحتاج إلى برنامج نصي يسمى 'xx42' الذي نسخ "Level1.level2.name.42" ويمكنني بعد ذلك تعديل ذلك للقيم بخلاف 42. وأفضل أن يكون أكثر تحديدا هذا البرنامج النصي حتى أتمكن من استخدام
xx 42 p1 p2 p3
أو
xx 27 p1 p2 p3
بدلا من وجود برنامج نصي لكل قيمة. هذا من شأنه نسخ SDS المعطى ثم تمرير المعلمات p1
, p2
و p3
من خلال ل runother
.
المحلول 2
بعد قليل من العبث حولها، اكتشفت أنه يمكنك تخصيص مجموعات البيانات المطلوبة يدويا وتشغيلها IEBGENER
للقيام النسخة:
/* REXX */
"ALLOC FI(SYSPRINT) DUMMY REUSE"
"ALLOC FI(SYSIN) DUMMY REUSE"
"ALLOC FI(SYSUT1) DA('LEVEL1.LEVEL2.NAME.42') SHR REUSE"
"ALLOC FI(SYSUT2) DA('LEVEL1.LEVEL2.NAME') SHR REUSE"
"IEBGENER"
RC2 = RC
"FREE FI(SYSUT1)"
"FREE FI(SYSUT2)"
"FREE FI(SYSPRINT)"
"FREE FI(SYSIN)"
IF RC2 ^= 0 THEN DO
SAY "IEBGENER FAILED."
END
ELSE DO
RUNOTHER P1 P2 P3
END
نصائح أخرى
أثناء البحث عن شيء آخر، صادفت هذا المنصب. (أي أنه لم يأخذني سنتين لصياغة هذا الاستجابة) ويعتقد أن المركزيين في المستقبل (هل لا نزال موجودون؟) قد تجد أنها مفيدة.
يمكنك أيضا القيام SMCOPY:
address TSO "SMCOPY FDS('LEVEL1.LEVEL2.NAME.42') TDS('LEVEL2.LEVEL2.NAME')"
FDS - من DataSet، TDS - إلى DataSet. إذا لم تكن TDS، فستحصل على رمز الإرجاع 4، ولكن سيتم تنفيذ النسخة. يمكنك استخدام Smcopy لنسخ أعضاء المكتبة أيضا.
يمكنك أيضا استخدام فرز للقيام بنسخة من Sortin إلى Sortout. يمكنك التفاف أن JCL في بروك مع المعلمات أو استخدام العبارات المحددة، إلخ.