質問
私はCOBOLクラスでやっている割り当てのためにJCLでシンボリック変数を作成する方法について少し混乱しています。
たとえば、私は「PARMオプションの記号パラメータを指定し、デフォルトとしてTESTとAPOSTを指定する。」ことになっています。
どのように私は記号パラメータであることを「PARM」オプションを指定するのですか?
EDIT:監督を許します。私は、z / OSで、このJCLファイルを書いています。私は私が実行しているどのようなOS言及するのを忘れてしまったと思われます。
事前に感謝します!
EDITます:
@avisserます:
だから、何を言っていることは、私はちょうどそれを呼び出すことができるということです「&PARM = 『TEST、APOST』」と、私は別のJCL文でこのPROCを実行すると、そのパラメータを変更したい場合は、リストされているPARMSをすることができ呼び出しJCLから変わったのか?
EDITます:
@avisserます:
ええ、申し訳ありませんが、私は本当に私のCOBOL、JCLで、私は、COBOLコンパイラ(IGYCRCTL)を呼び出していリンケージエディタ(HEWL)とプログラムが(EXEC PGM =)をフェッチ...もっと具体的なことで作業する必要があります。
EDITます:
おそらくそれは私の出力が何であるかを確認するために役立つだろう。私は本当にこれまで助けしようとしたすべての人に感謝行います。
出力:
------ JES2ジョブ統計------
37 CARDS READ
61 SYSOUT PRINT RECORDS
0 SYSOUT PUNCH RECORDS
3 SYSOUT SPOOL KBYTES
0.00 MINUTES EXECUTION TIME
!! JESスプールファイルの最後!
1 // KC03CEFA JOB、 'MATT R'、MSGCLASS = H、TYPRUN = SCAN JOB07731
// *
2 // STEP01 EXEC PGM = IGYCRCTL、&REGION = 248K、
//&PARM = 'TEST、APOST'
3 // STEPLIB DD DSN = IGY340.SIGYCOMP、DISP = SHR
/ *
4 // SYSLIN DD&DSN = && OBJSET、UNIT = DISK、SPACE =(TRK、(3,3))、
//&DISP =(NEW、PASS、DELETE)
5 // SYSPRINT DD SYSOUT = *
6 // SYSUT1 DDのUNIT = DISK、SPACE =(CYL、(1,1))
7 // SYSUT2 DDのUNIT = DISK、SPACE =(CYL、(1,1))
8 // SYSUT3 DDのUNIT = DISK、SPACE =(CYL、(1,1))
9 // SYSUT4 DDのUNIT = DISK、SPACE =(CYL、(1,1))
10 // SYSUT5 DDのUNIT = DISK、SPACE =(CYL、(1,1))
11 // SYSUT6 DDのUNIT = DISK、SPACE =(CYL、(1,1))
12 // SYSUT7 DDのUNIT = DISK、SPACE =(CYL、(1,1))
// *
// *
13 // STEP02 EXEC PGM = HEWL、&COND =、&REAGION = 2048K、
//&PARM =
14 // SYSLIB DD DSN = CEE.SCEELKED、DISP = SHR
15 // SYSLIN DD&DSN = && OBJSET、&DISP =(OLD、DELETE)
16 // SYSLMOD DD DSN = && TEMPLIB(PGM6)、
// SPACE =(1024、(50,20,1))、UNIT = DISK、
// DISP =(NEW、CATLG、DELETE)
17 // SYSPRINT DD SYSOUT = *
18 //プリンタのDD SYSOUT = *
19 // SYSUT1 DDのUNIT = DISK、SPACE =(TRK、(10,10))
// *
// *
20 // STEP01 EXEC PGM = PGM6、&PARM = TERMTHDACT(DUMP)
21 // STEPLIB DD DSN = && TEMPLIB、DISP = SHR
22 // CEEDUMP
23 // SYSUDUMP
24 //プリンタのDD SYSOUT = *
25 //製品DD DSN = KC02322.CSCI465.SP09(DATA1)、DISP = SHR
26 // SYSIN DD *
!! JESスプールファイルの最後!
STMT NO。メッセージ
2 IEFC630I未確認KEYWORD&REGION
2 IEFC630I未確認KEYWORD&PARM
4 IEFC630I未確認KEYWORD&DSN
4 IEFC630I未確認KEYWORD&DISP
13 IEFC630I未確認KEYWORD&COND
13 IEFC630I未確認KEYWORD&REAGION
13 IEFC630I未確認KEYWORD&PARM
15 IEFC630I未確認KEYWORD&DSN
15 IEFC630I未確認KEYWORD&DISP
20 IEFC630I未確認KEYWORD&PARM
22 IEFC605I正体不明のオペレーションフィールド
23 IEFC605I正体不明のオペレーションフィールド
!! JESスプールファイルの末尾!!
解決
記号パラメータは、アンパサンドが先行名前です。 JCLステートメントで使用する場合、実行時に彼らが提供された値に変換します。 (Z / OS上で)それらを作成する1つの方法は、使用している
// SET name = value
宣言。 あなたはPARMを使用する場合、それは1で作業できるように、あなたはあなたのプログラムを設計する必要があります。おそらく、割り当ては、のことの(:リンケージ・セクションのヒントを)行う方法についてです。またはJCLがあなたのCOBOLクラスの一部である?
コンパイラディレクティブのように私にはTESTとAPOSTルック。コンパイラを呼び出すときに、あなたのプログラムでそれらを指定することができる場合、私は知らない、私の職場で私たちはそれらを供給します。
EDITます:
我々は独立したJCLストリームに我々のプログラムをコンパイルして実行する傾向があるとして、[OK]をこれは、私には少し珍しいです。とにかく。
2番目の文を撮るます:
2 //STEP01 EXEC PGM=IGYCRCTL,®ION=248K,
// &PARM='TEST,APOST'
REGIONとPARMあなたは(これは「未確認KEYWORD」のメッセージを説明します)そうすることは自由ですが、本当に、シンボル名として提示することを意図していない、いわゆる位置パラメータであり、彼らはキーワードです。
一般的な使用 - 該当する場合は、 - のオペランドののためのシンボリック名を提供することです
このようなパラメータ。そして、明らかに、あなたが最初にそれらの値を定義する必要があり、例えばます:
// SET OPTIONS='TEST,APOST'
//STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
// PARM=&OPTIONS
他のヒント
[OK]を、私はいくつかの掘削をした、そして、avisserがくれた指導で、私は私がしなければならなかったかを把握することができました。だから、この質問(または同様のもの)を持っているかもしれない人のための今後の参考のために、ここで私は考え出したものです。
ステップ1:あなたが使用される変数で "PROC" を作成します。
。EX。私は「TEST」と「APOST」のデフォルト値を持っていた私のCOBOLコンパイラで「PARM」のための変数を使用したかったので、私のようなものを書いてます:
//PROC1 PROC CPARM='TEST,APOST',
ステップ2:あなたの実際のJCLの段階で、これらの新しく定義された記号パラメータを使用してください。 「&」の文字が続くもの、それは象徴的なパラメータであることを示しています。
EX。私は私のCOBOLのコンパイルステップのために、前述の「CPARM」を使用します:
//COB EXEC PGM=IGYCRCTL,REGION=&CREGION,
// PARM='&CPARM'
ステップ3:あなたの実際の工程の後に "PEND" 文を使用して、あなたの "PROC" を終了
。EX。私は私のすべての変数をリストされていると私は、コンパイルのためのすべてのステップ列挙された後(右PENDステートメントの前に見られるように、コンパイラを見つけることができるコンパイラの名前を、そして、SYSUT1-SYSUT7文)は、あなたのPENDキーワードを配置します。
//SYSUT7 DD UNIT=DISK,SPACE=(CYL,(1,1))
// PEND
ステップ4:!あなたのソースファイルに追加のJCLステップおよび/またはコードを追加し、あなたはオフにしている。
注:
- あなたは、単一のJCLファイルに複数のPROCステートメントを持つことができます。私は3を持っていた:COBOLのコンパイルに1つ、リンケージエディタ用とプログラムフェッチのための1つ。私も自分のPROC文がでている同じファイルでCOBOLコードを持っています。
- これは、z / OSを実行しているIBMメインフレーム上で行われました。
-Above、私の「CPARM」変数が「TEST、APOST」がデフォルトに設定されていることがわかります。単に、フィールドの空白(例。CPARM =を)残すことによって、変数はデフォルトでnullにすることが可能です。
- あなたはCPARM定義の後に、カンマがあることに気づいたかもしれません。私はそれの後に複数の変数を持っているためです。 (すなわち。コンマ)を使用すると、任意のPROCのために作成し、最後の記号パラメータがそれ以下の何もない必要があることを覚えていませんしてください。あなたは、もちろん、コメント行(// *)、その後、別のPROCまたは実際のコードを配置することができますが、最後の記号パラメータが同じ行にそれを次のように何も持っていないはずです。