Article tagué Tips
DB2 for z/OS – Diagnosis Guide and Reference
28/01/13
Sur le site des ressources techniques de DB2 for z/OS il est impossible de télécharger le document « Diagnosis Guide and Reference », il faut obligatoirement passer par une commande car ce manuel est lié à la license du DB2 installé sur votre machine.
Toutefois il est possible de le récupérer directement depuis votre Système : Télécharger via FTP en mode binaire le membre DSNDR du PDS DSNx10.SDSNIVPD(*) puis renommer le avec une extension .PDF
Et voilà.
(*)DSNx10 étant le hlq d’installation de DB2
ISPF : Recherche par type de caractères
27/03/11
Dans l’éditeur ISPF, il est possible de chercher une chaîne de caractère spécifique avec la commande FIND 'text', j’en parle dans les techniques utiles d’édition. Il est aussi possible de faire une recherche par type de caractère.
Il faut pour cela utiliser dans une sting P'' les caractère spéciaux ci-dessous qui représentent chacun un type de caractères :
. (Point) Caractère non affichable
^ (Circonflexe) Caractère non blank
# (Dièse) Caractère numérique
- (Tiret) Caractère non numérique
@ (Arobace) Caractère alphabétique
< (Plus petit) Caractère alphabétique minuscule
> (Plus grand) Caractère lphabétique majuscule
$ (Dollar) Caractère spéciaux ( : , ; = +)
Exemples :
FIND P’PPD##T’. On trouvera PPD01T, PPD02T, PPD21T…
FIND P'$####'. On trouvera #4123, (2000, ’0001 …
FIND P’^’ 72. Y a-t-il un caractère en colonne 72 du dataset ?
Attention au codepage de votre terminal, certains caractères spéciaux peuvent différer.
[Edit] Voir aussi les exemples d’usage avec CHANGE dans le commentaire de HUG
DFSORT : Meilleures compréhension et maintenabilité grâce aux symboles
30/08/10
Coder un step de tri par DFSORT ou ICETOOL, c’est pas bien compliqué. L’accumulation de plusieurs steps dans différents jobs avec réutilisation du même jeu de donnée partiel ou complet, c’est beaucoup moins rigolo… surtout s’il faut les faire évoluer dans le cadre d’un changement de format de données en entrée.
C’est la qu’interviennent les “symboles” qui nous permettent de coder cette forme classique peu explicite,
SORT FIELDS=(3,3,CH,A,6,32,CH,A)
En quelque chose de plus sexy, compréhensible et de haute maintenabilité :
SORT FIELDS=(CODE,A,LIBELLE,A)
Les symboles CODE et LIBELLE doivent être déclarés dans une carte SYMNAMES (symbols names) de la manière suivante :
//SYMNAMES DD *
CODE,3,3,CH
LIBELLE,6,32,CH
/*
La taille limite d’un symbole est de 50 caractères alphanumériques, le tiret (-) et l’underscore (_) sont acceptés. Code_Situation_Juridique est un symbole valide.
Les symboles sont sensibles à la casse, Code_Situation_Juridique est différent de Code_situation_juridique.
Je suis sûr que vous voyez maintenant tout le potentiel de ces symboles et que vous n’hésiterez pas à les utiliser.
ISPF : ISRDDN Current Data Set Allocations list
21/04/10
Lorsque vous vous connectez à une session TSO, vous utilisez couramment les commandes TSO implémentées.
Elles peuvent être développées par l’équipe Support (faciliter la navigation dans un source cobol, visualiser le contenu d’un DSN dans un JCL), par un fournisseur de logiciel (FABATCH pour invoquer File-Aid Batch en tâche de fond, F1 pour browser directement un fichier avec File-Aid, QW pour appeler QUICKREF), ou par vous-même si vous savez coder en REXX ou CLIST.
Mais comment TSO connaît-il l’existence de ces commandes et où trouve-t-il leur source ?
Lorsque vous vous connectez à votre session TSO, le système pré-alloue un grand nombre de dataset et en particulier ceux nécessaires au bon fonctionnement des applications ISPF : SYSEXEC, SYSPROC, ISPCLIB, ISPPLIB, ISPSLIB, ISP*… C’est en scannant ces datasets particuliers que TSO peut lancer la commande invoquée.
Tout comme TSO, il vous est possible de scanner ces datasets, d’une part pour connaître leur DSN et d’autre part pour trouver le source d’une commande. Pour cela il existe une commande TSO que j’oublie souvent, cet article aura le mérite de me la rappeler
:
TSO ISRDDN
Vous obtiendrez le panel “Current Data Set Allocations” contenant la liste des DDnames alloués et leur DSN.
Pour trouver le source d’une CLIST, d’un REXX, d’un panel, d’un skeleton ou autre, il suffit de saisir en ligne ===>Command :
M nom_du_membre_recherché
Tout cela est bien pratique pour connaître le PDS où sauvegarder ses outils projet développés en REXX ou CLIST.
Pour aller plus loin :
- ISPF zOS User’s Guide Vol I V1R9 Appendix G. ISRDDN diagnostic utility, P. 213
- Using TSO ISRDDN and REXX to organize your automations
- Le forum DVP z/OS ici, là et là.
Bonne lecture.
Alternatives et débranchements, application des lois de De Morgan
19/03/10
Je ne vais pas vous expliquer ici la théorie logique du calcul des propositions, j’en serais bien incapable, mais je vais vous faire un rappel important concernant l’application des lois de De Morgan car elles sont source d’erreur pour tout développeur débutant.
Lois de De Morgan :
La négation de la conjonction de deux propositions est équivalente à la disjonction des négations des deux propositions.
La négation de la disjonction de deux propositions est équivalente à la conjonction des négations des deux propositions.
Autrement dit:
non (A ou B) = non A et non B
non (A et B) = non A ou non B
Il faut donc être vigilant dans un programme si vous êtes amené à coder un test sur des non-conditions multiples.
Prenons par exemple le cas d’un test pour lequel la situation familiale doit être différente de “célibataire” ou différente de “veuf” ou différente de “marié”, vous serez sans doute tenté de coder comme suit:
IF SITU-FAMILLE NOT = ‘C’ OR
SITU-FAMILLE NOT = ‘V’ OR
SITU-FAMILLE NOT = ‘M’
[...]
END-IF.
En fait vous aurez tout faux car avec la loi de dualité vue plus haut, il aurait fallu coder ainsi:
IF SITU-FAMILLE NOT = ‘C’ AND
SITU-FAMILLE NOT = ‘V’ AND
SITU-FAMILLE NOT = ‘M’
[...]
END-IF.

[Source : © nojhan 2010-03-17 - Geekscottes]
ISPF : Les commandes de ligne
10/11/09
Le document existait déjà sur mon espace rédacteur dvp, le voici maintenant disponible ici avec la mise en page associée à ce blog : Plus efficace avec l’éditeur ISPF – Les commandes de ligne [pdf]
Au sommaire :
1 – Généralités
1.1 – Commandes de ligne
1.2 – Utilisation des commandes de ligne
2 – Commandes de ligne basiques
2.1 – I – Insertion
2.2 – D – Suppression (Delete)
2.3 – R – Répétition (Repeat)
3 – Commandes de ligne de copie et de déplacement
3.1 – C – Copie
3.2 – M – Déplacement (Move)
3.3 – Destination
3.3.1 – A – Après cette ligne (After)
3.3.2 – B – Avant cette ligne (Before)
3.3.3 – O – Par dessus cette ligne (Overlay)
4 – Commandes de ligne de décalage
4.1 – () – Décalage de colonne
4.2 – <> – Décalage de données
5 – Commandes de ligne d’exclusion et d’affichage
5.1 – X – Exclusion
5.2 – F – Affichage des premières lignes exclues (First)
5.3 – L – Affichage des dernières lignes exclues (Last)
5.4 – S – Affichage des lignes d’indentation du plus petit
niveau (Show)
6 – Commandes de ligne de manipulation de texte
6.1 – TS – Division de ligne (Text Split)
6.2 – TF – Remontée et aboutement de ligne (Text Flow)
6.3 – TE – Edition de texte (Text Enter)
6.4 – LC – Bas de casse (Lower Case)
6.5 – UC – Haut de casse (Upper Case)
7 – Commandes de ligne spéciale
7.1 – COLS – Affichage d’une règle horizontale
7.2 – MASK – Affichage d’un masque d’insertion
7.3 – BNDS – Limitation de la zone de travail (Bounds)
8 – Commandes de ligne diverses
8.1 – MD – Transformation en ligne de donnée (Make Dataline)
9 – Remerciements
Bonne lecture.
ISPF : Techniques utiles d’édition
17/10/09
Voici quelques techniques utiles avec l’éditeur ISPF. Télécharger le document au format PDF.
Exclusion par chaine de caractère
La simple utilisation de la commande primaire EXCLUDE (ou X) suivie d’une chaîne de caractère peut se révéler très utile.
Supposons par exemple, que vous vouliez passer en revue toutes les lignes de commentaire d’un source COBOL afin de supprimer les commentaires obsolètes, l’enchaînement des commandes suivantes affichera les seules lignes de commentaire :
Command => X ALL ‘*‘ 7;FLIP
Que l’on peut traduire par : exclure (masquer temporairement) toutes les lignes du fichier source qui ont un astérisque (*) en colonne 7, puis, inverser l’exclusion.
Exclusion globale suivie d’une recherche globale
Au lieu d’utiliser une chaîne de caractère avec la commande primaire EXCLUDE, c’est l’ensemble du fichier en édition que l’on masque. Puis, en utilisant une chaîne de caractère avec la commande FIND (ou F) ALL, les lignes cibles sont révélées.
On obtient le même résultat que l’exemple précédent avec l’enchaînement de commandes :
Command => X ALL;F ALL ‘*‘ 7
Que l’on peut traduire par : exclure (masquer temporairement) toutes les lignes du fichier en édition. Puis, rechercher et rendre visible toutes les lignes qui ont un astérisque (*) en colonne 7.
Suppression de lignes à partir de leur statut exclu (X) ou non-exclu (NX)
C’est une méthode très utile pour « nettoyer » certains fichiers. Elle nécessite l’utilisation de la commande primaire DELETE (ou DEL) en conjonction avec le paramètre X (exclu) ou NX (non-exclu).
En reprenant l’exemple du début, si l’on souhaite finalement supprimer tous les commentaires, il suffira de supprimer toutes les lignes non-exclues, pour cela on saisira la commande suivante :
Command => DEL ALL NX
Que l’on peut traduire par : supprimer toutes les lignes visibles (les commentaires)
On peut évidemment faire plus rapide, si le but final est de supprimer toutes les lignes de commentaire d’un source COBOL, on saisira directement :
Command => X ALL ‘*‘ 7;DEL ALL X
Que l’on peut traduire par : exclure (masquer temporairement) toutes les lignes du fichier source qui ont un astérisque (*) en colonne 7, puis supprimer les lignes masquées.
Limiter la portée de la commande primaire CHANGE par exclusion de ligne au lieu d’étiquettes
Les étiquettes (ou labels), qui seront traitées dans un article spécifique, permettent de restreindre l’étendu d’une commande à un bloc de ligne qu’elles déterminent, par exemple :
Command => C ALL ‘ ‘ 1 ‘– –‘ .A .B
Que l’on peut traduire par : changer tous les doubles espaces en colonne 1 par ‘– –‘ dans le bloc de ligne .A – .B.
Une condition préalable à cette commande est bien entendu le placement des étiquettes .A sur la première ligne et .B sur la dernière ligne du bloc de ligne souhaité.
L’exclusion peut se substituer à l’utilisation des étiquettes dans le cas de la commande primaire CHANGE.
Pour limiter la portée d’une commande primaire CHANGE aux seules lignes exclues, il suffit d’utiliser la syntaxe suivante :
Command => C ALL ‘ ‘ 1 ‘– –‘ X
Quel l’on peut traduire par : changer tous les doubles espaces en colonne 1 des lignes exclues par ‘– –’.
L’intérêt principal de cette substitution est que le CHANGE peut être réalisé sur plusieurs zones non consécutives, il suffit pour cela d’utiliser n’importe quelle méthode d’exclusion vue précédemment et/ou l’utilisation des commandes de lignes X ou XX/XX (Cf. Plus efficace avec l’éditeur ISPF : Les commandes de ligne)
Retour à la normale
Pour réafficher les lignes masquées, il suffit de faire un RESET (ou RES) en ligne de commande :
COMMAND => RES
File-AID : Recherche avec opérateurs
23/02/09
Il est possible avec File-AID d’effectuer une recherche avec opérateurs.
Il suffit de rajouter dans votre recherche les opérateurs traditionnels : EQ, NE, LT, GT, LE et GE (=, <>, <, >, ≤, ≥).
Pour rechercher une date supérieure au 4 novembre 2008 en colonne 10 :
F GT '2008-11-04' 10
Attention la recherche avec colonne nommée ne fonctionne pas avec les opérateurs.
DFSORT : Distribution d’enregistrements
9/02/09
Vous avez un gros fichier à découper en 3 pour faire un traitement en parallèle des 3 fichiers résultants, mais vous ne connaissez pas la volumétrie du gros fichier pour déterminer le nombre d’enregistrements à mettre dans chacun des 3 fichiers de sortie.
Comment faire ?
DFSORT propose les options SPLIT, SPLITBY et SPLIT1R qui permettent de distribuer les enregistrements comme suit :
SPLIT: Le premier enregistrement est écrit dans le premier fichier de sortie, le second enregistrement dans le second fichier de sortie et ainsi de suite jusqu’à ce que tous les fichiers de sortie comportent un enregistrement. Ensuite la distibution recommence au premier fichier de sortie,SPLITBYpermet la même chose queSPLITmais au lieu de distribuer enregistrement par enregistrement, vous pouvez lui indiquer le nombre d’enregistrement qui doivent être distribué à chaque fois,SPLIT1Rpermet de distribuer un nombre déterminé d’enregistrement dans chaque fichier de sortie et continue à distribuer les enregistrements restants dans le dernier fichier de sortie sans revenir au premier.
Supposons que l’on ait le fichier :
01
02
03
04
05
06
07
08
09
10
Si :
OPTION COPY
OUTFIL FNAMES=(SORTOF01,SORTOF02,SORTOF03),SPLIT
On obtient :
SORTOF01
01
04
07
10
SORTOF02
02
05
08
SORTOF03
03
06
09
Si :
OPTION COPY
OUTFIL FNAMES=(SORTOF01,SORTOF02,SORTOF03),SPLITBY=3
On obtient :
SORTOF01
01
02
03
10
SORTOF02
04
05
06
SORTOF03
07
08
09
Si :
OPTION COPY
OUTFIL FNAMES=(SORTOF01,SORTOF02,SORTOF03),SPLIT1R=2
On obtient :
SORTOF01
01
02
SORTOF02
03
04
SORTOF03
05
06
07
08
09
10
Pratique ?
ISPF : Qu’ai-je modifié ?
3/02/09
J’étais récemment en train de modifier un source COBOL, quand une urgence à la machine à café m’a fait quitter mon poste.
Quand je suis retourné à mon source, je n’arrivais pas à me rappeler les modifications déjà effectuées, heureusement ISPF à prévu le coup, en ligne de commande saisissez :
COMP *
Et le tour est joué !
NB : le dataset en edition ne doit pas avoir été sauvegardé


Commentaires
Il y a 74 jours 11 heures
Il y a 74 jours 11 heures
Il y a 100 jours 11 heures
Il y a 103 jours 5 heures
Il y a 111 jours 9 heures