Article tagué Tips

ISPF : Les commandes de ligne

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

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

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

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,
  • SPLITBY permet la même chose que SPLIT mais au lieu de distribuer enregistrement par enregistrement, vous pouvez lui indiquer le nombre d’enregistrement qui doivent être distribué à chaque fois,
  • SPLIT1R permet 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é ?

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é

Avant :
Capture ecran COMPARE 1

Après :
Capture ecran COMPARE 2

File-AID : switch Browse et Edit mode

J’ai de bonnes habitudes qui peuvent parfois nuire à la productivité…

Quel que soit l’outil utilisé (Dslist, Platinum, File-AID…) quand je veux visualiser un fichier (un dataset ou une table) je le fais sagement en mode “browse”, cela m’évite de modifier les données sans m’en rendre compte. Eternel problème de gros doigts !

Cette bonne habitude s’est révélée être extrêmement contre-productive lorsque après avoir passé près d’une demi heure à chercher LA donnée qui vérolait un fichier très volumineux, j’ai voulu la modifier.

Arggh!!! On doit ressortir du fichier (2 x F3), on  passe en mode “edit” et on recommence le boulot pour retrouver la donnée à modifier.

Heureusement grâce à moi (ou alors vous auriez dû me le dire plus tôt !), voici comment switcher du mode “browse” au mode “edit” sans sortir du fichier :

Sur la ligne Command ==> :

GO EDIT

ou

GO BROWSE

Elle est pas belle la vie ?

File-AID : Rechercher dans une colonne

Il est possible avec File-AID de faire une recherche dans une colonne spécifique.

Si vous souhaitez chercher en colonne 10 (DATEMAJ) la valeur 2008-11-04 vous pouvez utiliser les 2 syntaxes suivantes en ligne de commande COMMAND ===> :

F /10 2008-11-04

ou bien :

F /DATEMAJ 2008-11-04

NB : Cela fonctionne aussi bien en mode FMT (Formaté) qu’en mode VFMT (Formaté verticalement) et quelque soit le mode d’affichage (Edit ou Browse)

ISPF : Member in use

N’avez-vous jamais entendu dans un open space le cri de douleur :

Mais putain, bordel de merde, qui est en edit sur le membre ?

Vous connaissez sans doute l’astuce pour savoir qui provoque ce member in use mais un petit rappel pour les moins aguerris peut-être utile :

Il suffit simplement de taper 2 fois F1 pour voir apparaître le panel suivant avec la réponse :

Data set ‘MON.SUPER.PDS(MEMBRE01)’ is in use by the following 1 user(s) and/or job(s):
————————————————————————————————————————————–
 ZAA5084

 

 

————————————————————————————————————————————–

On terminals which support extended data streams, TSO user and Job names have the following colors:
   NAME1 – Normal Green – Owns data set shared
   NAME2 – Normal Red – Owns data set exclusively
   NAME3 – Reverse Video Green – Waiting for shared use

SDSF : Naviguer dans un compte rendu

Vous savez que pour sélectionner le compte rendu d’un job en queue SDSF vous pouvez utiliser “S” ou “?”.

Dans ce dernier cas vous obtenez le détail du job organisé en sous-groupe (JESSMSGLG, JESJCL, JESYSMSG, SYSPRINT, SYSTSPRT…)

Comment utiliser la sélection du job complet (“S”) et naviguer à l’intérieur par sous-groupe?

Il suffit d’utiliser en ligne de commande N (Next) ou P (Previous) pour sauter d’un sous-groupe à l’autre.

Connaissiez-vous cette astuce ?

DFSORT : Remplacement de caractère

L’article précédent m’a inspiré cet article qui est le premier d’une série de billet que j’espère longue, régulière et intéressante de trucs et astuces qui font gagner du temps.

Let’s go…

Comment remplacer dans un fichier tous les low-values par des espaces ?

Il suffit d’utiliser ALTSEQ CODE

Voici un exemple pour changer tous les low-values (X’00′) par des espaces (X’40′) dans un fichier FB avec un LRECL=120.

  ALTSEQ CODE=(0040)
  OUTREC BUILD=(1,120,TRAN=ALTSEQ)

Vous l’aurez compris, si vous souhaitez remplacer tous les $ (X’5B’) par des ; (X’5E’) il faudra coder ainsi :

  ALTSEQ CODE=(5B5E)
  OUTREC BUILD=(1,120,TRAN=ALTSEQ)

Notez qu’avec OUTREC, INREC et OUTFIL il est préconisé d’utiliser BUILD à la place de FIELDS (ce dernier étant réservé à SORT et MERGE).