4 votes

Confusion JCL symbolique

Je suis un peu confus sur la manière de créer une variable symbolique en JCL pour un devoir que je fais dans mon cours de COBOL.

Par exemple, je suis censé "Spécifier un paramètre symbolique pour l'option PARM et spécifier TEST et APOST comme valeur par défaut."

Comment puis-je désigner l'option "PARM" comme un paramètre symbolique?

EDIT: Pardonnez l'oubli; il semble que j'ai oublié de mentionner quel OS j'utilise. Je rédige ce fichier JCL dans z/OS.

Merci d'avance!

EDIT:

@avisser:

Donc, ce que vous dites, c'est que je peux simplement l'appeler "&PARM='TEST,APOST'" et, si je voulais modifier ce paramètre lorsque j'exécute cette procédure avec une autre instruction JCL, les paramètres indiqués peuvent être modifiés à partir de l'appel JCL?

EDIT:

@avisser:

Oui, désolé, j'ai vraiment besoin de travailler sur le fait d'être plus précis... Dans mon JCL COBOL, j'appelle le compilateur COBOL (IGYCRCTL), l'éditeur de liaison (HEWL) et un programme fetch (EXEC PGM=).

EDIT:

Il serait peut-être utile de voir quel est mon résultat. J'apprécie vraiment tous ceux qui ont essayé d'aider jusqu'à présent.

Résultat:

------ STATISTIQUES DU TRAVAIL JES2 ------

       37 CARTES LUES                                                                                                            

       61 ENREGISTREMENTS D'IMPRESSION SYSOUT                                                                                                  

        0 ENREGISTREMENTS DE PERFORATION SYSOUT                                                                                                  

        3 KILO-OCTETS DE LA FILE D'ATTENTE SYSOUT                                                                                                   

     0.00 MINUTES DE TEMPS D'EXÉCUTION                                                                                                

!! FIN DU FICHIER SPOOL JES !! 1 //KC03CEFA TRAVAIL ,'MATT R',MSGCLASS=H,TYPRUN=SCAN JOB07731 //*
2 //STEP01 EXEC PGM=IGYCRCTL,®ION=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 //PRINTER 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 //PRINTER DD SYSOUT=*
25 //PRODUCTS DD DSN=KC02322.CSCI465.SP09(DATA1),DISP=SHR
26 //SYSIN DD *
!! FIN DU FICHIER SPOOL JES !! STMT NO. MESSAGE 2 IEFC630I MOT-CLÉ NON IDENTIFIÉ ®ION 2 IEFC630I MOT-CLÉ NON IDENTIFIÉ &PARM 4 IEFC630I MOT-CLÉ NON IDENTIFIÉ &DSN 4 IEFC630I MOT-CLÉ NON IDENTIFIÉ &DISP 13 IEFC630I MOT-CLÉ NON IDENTIFIÉ &COND 13 IEFC630I MOT-CLÉ NON IDENTIFIÉ &REAGION 13 IEFC630I MOT-CLÉ NON IDENTIFIÉ &PARM 15 IEFC630I MOT-CLÉ NON IDENTIFIÉ &DSN 15 IEFC630I MOT-CLÉ NON IDENTIFIÉ &DISP 20 IEFC630I MOT-CLÉ NON IDENTIFIÉ &PARM 22 IEFC605I CHAMP D'OPÉRATION NON IDENTIFIÉ 23 IEFC605I CHAMP D'OPÉRATION NON IDENTIFIÉ !! FIN DU FICHIER SPOOL JES !!

6voto

Albert Visser Points 656

Les paramètres symboliques sont des noms précédés d'un esperluette. Lorsqu'ils sont utilisés dans une instruction JCL, à l'exécution, ils sont convertis en la valeur fournie. Une manière de les créer (sur z/OS) consiste à utiliser une

// SET name = value

déclaration. Si vous utilisez un PARM, vous devez concevoir votre programme de manière à ce qu'il puisse fonctionner avec un. Peut-être que l'affectation concerne comment faire cela (indice : section de liaison). Ou JCL fait-il partie de votre cours COBOL?

TEST et APOST me semblent être des directives de compilateur. Je ne sais pas si vous pouvez les spécifier dans votre programme, sur mon lieu de travail, nous ne les fournissons que lors de l'appel du compilateur.

EDIT:

D'accord, c'est un peu inhabituel pour moi, car nous avons tendance à compiler et exécuter nos programmes dans des flux JCL séparés. Mais bon.

Prenant votre deuxième déclaration:

2 //STEP01 EXEC PGM=IGYCRCTL,®ION=248K,
  // &PARM='TEST,APOST'

REGION et PARM sont des paramètres positionnels, ce sont des mots-clés, pas vraiment destinés à être présentés comme des noms symboliques, bien que vous soyez libre de le faire (ceci expliquera les messages "MOT-CLÉ NON IDENTIFIÉ").
L'utilisation commune - lorsque applicable - est de fournir des noms symboliques pour les opérandes de ces paramètres. Et bien sûr, vous devez définir une valeur pour eux d'abord, par exemple :

  // SET OPTIONS='TEST,APOST'
  //STEP01 EXEC PGM=IGYCRCTL,REGION=248K,
  // PARM=&OPTIONS

4voto

Enyalius Points 114

Ok, j'ai fait quelques recherches et, avec les conseils qu'avisser m'a donnés, j'ai pu comprendre ce que je devais faire. Donc, pour référence future pour toute personne qui pourrait avoir cette question (ou une similaire), voici ce que j'ai découvert :

Étape 1 : Créez un "PROC" avec les variables que vous utiliserez.

par exemple. Je voulais utiliser des variables pour le "PARM" dans mon compilateur COBOL qui avaient les valeurs par défaut de "TEST" et "APOST", donc j'ai écrit quelque chose comme :

//PROC1  PROC  CPARM='TEST,APOST',

Étape 2 : Utilisez ces paramètres symboliques nouvellement définis dans votre étape JCL réelle. Le caractère "&" montre que tout ce qui suit est un paramètre symbolique.

par exemple. J'ai utilisé le "CPARM" mentionné précédemment pour mon étape de compilation COBOL :

//COB    EXEC  PGM=IGYCRCTL,REGION=&CREGION,  
//             PARM='&CPARM'

Étape 3 : Terminez votre "PROC" avec une instruction "PEND" après votre étape réelle.

par exemple. Après avoir répertorié toutes mes variables et avoir répertorié toutes les étapes de compilation (nom du compilateur, où le compilateur peut être trouvé, et, comme on peut le voir juste avant l'instruction PEND, les déclarations SYSUT1-SYSUT7), placez votre mot-clé PEND :

//SYSUT7   DD UNIT=DISK,SPACE=(CYL,(1,1))  
//         PEND

Étape 4 : Ajoutez d'autres étapes JCL et/ou du code à votre fichier source et vous êtes prêt!

Remarques:

-Vous pouvez avoir plus d'une instruction PROC dans un seul fichier JCL. J'en avais trois : une pour la compilation COBOL, une pour l'éditeur de liaison et une pour la récupération du programme. J'ai également du code COBOL dans le même fichier que mes instructions PROC.

-Cela s'est passé sur un ordinateur central IBM exécutant z/OS.

-Ci-dessus, on peut voir que ma variable "CPARM" est définie par défaut à 'TEST,APOST'. Il est possible d'avoir une variable nulle par défaut en laissant simplement le champ vide (par exemple, CPARM=,).

-Vous avez peut-être remarqué qu'après la définition de CPARM, il y a une virgule; cela est parce que j'ai plus de variables après. Veuillez vous rappeler que le dernier paramètre symbolique que vous créez pour un PROC donné ne doit rien suivre (c'est-à-dire pas de virgule). Vous pouvez bien sûr placer une ligne de commentaire (//*), un autre PROC ou du code réel par la suite, mais le dernier paramètre symbolique ne doit rien suivre sur la même ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X