Article tagué Cobol

Alternatives et débranchements, application des lois de De Morgan

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.

« Branchement conditionnel »
[Source : © nojhan 2010-03-17 – Geekscottes]

COBOL : File status keys

Qu’est-ce que les file status, comment les mettre en place, quels sont les valeurs possibles ?

Voici quelques questions qui trouveront r̩ponses dans ce nouveau document : COBOL РFile Status Keys, ̩tat des fichiers.

Bonne lecture.

50 ans de COBOL

50 ans de COBOL

COBOL a 50 ans

http://www.cobol.com/

Exemple d’utilisation de la fonction REVERSE

On m’a soumis récément un problème qui me semblait simple mais ne l’était pas tant que ça :

Dans un programme COBOL, comment concaténer un nom en PIC X(32) et un prénom en PIC X(32) dans un champ résultant en PIC X(32), sachant que le nom ou le prénom peuvent être composés d’1 ou plusieurs mots séparés par un espace et qu’en cas de troncature dans le champ résultant le nom prime.

Bouaaahhh! Facile! Avec une boucle lettre par lettre est un INSPECT qui va bien on doit pouvoir faire ça rapidos.

Je me suis amusé et bien c’etait pas jojo à voir!

C’est Homer-ac sur ce billet du forum Cobol de DVP qui m’a donné la piste du code final que voilà :

       
WORKING-STORAGE SECTION.
01 W-CPT           PIC S9(4) COMP.
01 W-LONG-NOM      PIC S9(4) COMP.
01 W-NOM           PIC X(32).
01 W-NOM-REV       PIC X(32).
01 W-PRENOM        PIC X(32).
01 W-NOMPREN       PIC X(32).
 
PROCEDURE DIVISION.
 
INITIALIZE W-NOM W-NOM-REV W-PRENOM W-NOMPREN.
 
IF W-NOM NOT = SPACE
  MOVE FUNCTION REVERSE(W-NOM) TO W-NOM-REV
  MOVE 0 TO W-CPT
  INSPECT W-NOM-REV TALLYING W-CPT FOR LEADING
    SPACE
  SUBTRACT W-CPT FROM LENGTH OF W-NOM-REV GIVING
    W-LONG-NOM
END-IF.
 
STRING W-NOM(1:W-LONG-NOM) SPACE W-PRENOM
  DELIMITED BY SIZE INTO W-NOMPREN
END-STRING.

La fonction REVERSE permet d’inverser l’ordre de la donnée, les blancs de fin passent alors en première position, l’INSPECT TALLYING compte le nombre d’espace consécutif en début de chaîne, nombre qu’il suffit de soustraire à la longueur de la picture « nom » pour obtenir la position du premier espace à la fin de ce nom. Il suffit ensuite de concaténer nom et prénom avec STRING sans omettre d’indiquer la « portion » de nom qui doit être concaténer.

Documentation officielle Cobol

Je viens d’ajouter dans les ressources Cobol la documentation officielle IBM :

  • Enterprise COBOL for z/OS Programming Guide
  • Enterprise COBOL for z/OS Language Reference

Tips for Mainframe Programmers

J’ai trouvé sur esnip (un site de partage de document), une documentation très intéressante pour les développeurs cobol rédigée par un ingénieur Indien d’IBM, Rijo Joseph.

Après une introduction aux Mainframes et au système MVS, vous y trouverez des astuces qui traitent de Cobol, de la compilation, des JCL, de DB2, d’IMS, d’ISPF et des Abends courants.

Ce document est référencé dans les Autres ressources sous le petit nom Tips for Mainframe Programmers.