Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Discussion fermée
 
Outils de la discussion
Publicité
'
Vieux 21/11/2008, 14h18   #1
Homer-ac
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 522
Points : 522
Par défaut [z/OS] Fonctions et Routines de service Enterprise COBOL for z/OS

Voici un résumé succinct des différentes fonctions COBOL utilisables en z/OS : Enterprise Cobol V4.1
En fonctions de la version Cobol installée, toutes ne seront pas accessibles, soit parce que plus récentes (NATIONAL-OF),
soit parce que non activées dans le paramétrage cobol (DATEPROC pour le fenètrage siècle notemment)

Ce résumé se veut complet pour Enterprise CObol z/OS 4.1 (dernière version IBM : V5 pour ceux qui sont en z/OS 1.9/1.10)
Il ne s'agit que d'un aide mémoire, la brochure de référence est Enterprise COBOL for z/OS - Language Reférence : SC23.8528.00
http://www-01.ibm.com/software/awdto...l/zos/library/

L'utilisation des fonctions est à présent indissociable de la mise en oeuvre de Language Environnement.
On peut pour la plupart de celles-ci préférer des appels à des routines de service L.E. essentiellement pour les raisons suivantes :
- plus de sécurité : COBOL va 'planter' si on exécute une fonction date avec une date invalide, L.E. rendra un code retour
- plus de possibilités : on peut fournir à L.E. le masque correspondant au format de la donnée que l'on fournit et celui de la donnée que l'on veut recevoir, ou encore le niveau de précision dans des fonctions mathématiques complexes
- plus de facilités : Routines L.E complémentaires, supplémentaires ou plus précises (Millièmes de secondes via CEELOCT par ex. contre des centièmes par fonctions dates)

Par rapport aux routines de services L.E. l'intérêt des fonctions COBOL reste bien entendu la lisibilité et la simplicité d'utilisation.
(Encore qu'il conviendra de choisir à bon escient entre MOVE ou COMPUTE FUNCTION suivant que l'on travaille ou non sur des données numériques)


Résumé des fonctions z/OS Enterprise Cobol 4.1 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
ACOS	Valeur numérique en radians de l’arccosinus de l’argument
	FUNCTION ACOS (Arg)
	
ANNUITY	Valeur numérique approchée d’une traite annuelle à la fin de chaque période, pour un taux d’intérêt donné 
	FUNCTION ANNUITY(Taux-intérêt Nombre-périodes) 

ASIN	Valeur numérique en radians de l’arcsinus de l’argument
	FUNCTION ASIN (Arg) 
 
ATAN	Valeur numérique en radians de l’arctangente de l’argument
	FUNCTION ATAN (Arg) 

CHAR	Fournit le caractère de l’alphabet correspondant à la position ordinale fournie (> 0)
	FUNCTION CHAR (Arg) 

COS	Fournit le cosinus de l’angle ou l’arc en radians dans l’argument
	FUNCTION COS (Arg) 

CURRENT-DATE	Fournit la date et l’heure sur 21 caractères alphanumériques 
	ex: Display 'EXECUTION PROGRAMME LE ' function CURRENT-DATE(1:16) 
	* Avec	1-4	Année (avec le siècle)
		5-6	Mois		7-8	Jour
		9-10	Heure		11-12	Minutes	13-14	Secondes
		15-16	Centièmes de secondes
		17	- ou + / heure < ou >= Greenwich
		18-21	Excédant Heures et minutes / Greenwich

DATE-OF-INTEGER	Convertit un entier relatif à une date pivot en une date au format SSAAAMMJJ
	ex: Compute DATE-YYMD = Function DATE-OF-INTEGER (DATE-LILIAN)

DATE-TO-YYYYMMDD Fenètrage si option DATEPROC activée : ajout du siécle dans Arg2 d'après la date AAMMJJ de Arg1
	FUNCTION DATE-TO-YYYYMMDD (Arg1 Arg2)
 
DATEVAL		Fenètrage (si option DATEPROC activée) : conversion d’un champ non date en champ date 
	ex:	01	DATE1		Pic 9(8)    DATE FORMAT YYYYXXXX.
		01	ZONE-INTER	Pic 9(6).
	 	If Function Dateval (ZONE-INTER ‘YYXXXX’) Less Than DATE1 ... 
		Move Function Dateval (ZONE-INTER ‘YYXXXX’) to DATE1 
 

DAY-OF-INTEGER	Convertit un entier relatif à une date pivot en une date au format Julien SSAAAQQQ
	ex: Compute DATE-YYAAQQQ = Function DAY-OF-INTEGER (DATE-LILIAN)

DATE-TO-YYYYQQQ	Fenètrage si option DATEPROC activée : ajout du siécle dans Arg2 d'après la date AAQQQ de Arg1
	FUNCTION DATE-TO-YYYYQQQ (Arg1 Arg2)   

DISPLAY-OF	Retourne le caractère alphabétique correspondant à la valeur de l’argument pour le code page en argument 2
	FUNCTION DISPLAY-OF (Arg1 [Arg2]) 

FACTORIAL	Factorielle de l’argument
	FUNCTION FACTORIAL (Arg) 


INTEGER		Valeur de l'entier inférieur ou égal à l'argument
	FUNCTION INTEGER (arg) ex : 2.5 -> 2 

INTEGER-OF-DATE	Fournit le nombre de jours écoulés depuis une date pivot depuis une date au format SSAAMMJJ
	FUNCTION INTEGER-OF-DATE (Arg) 


INTEGER-OF-DAY	Fournit le nombre de jours écoulés depuis une date pivot depuis une date julien SSAAQQQ
	FUNCTION INTEGER-OF-DAY (Arg) 

INTEGER-PART	Fournit la partie entière de l’argument 
	FUNCTION INTEGER-PART (Arg) 
 
LENGTH		Fournit la longueur de l’argument
	FUNCTION LENGTH (Arg)

LOG		Fournit la valeur du logarithme de l’argument
	FUNCTION LOG (Arg) 


LOG10		Fournit la valeur du logarithme base 10 de l’argument
	FUNCTION LOG10 (Arg) 

LOWER-CASE	Traduction en minuscules 
	FUNCTION LOWER-CASE (Arg) 

MAX	Fournit le contenu de l’argument qui contient la valeur maximale 
	FUNCTION MAX (Arg 1 Arg n)
	ex: Move Function MAX(TABLE-VAL-ALPHA(ALL)) TO WS-MAXI 



MEAN	Moyenne arithmétique des arguments ou d'un tableau (ALL)
	FUNCTION MEAN (Arg1 Arg n) 

MEDIAN	Valeur de largument approchant la valeur moyenne d'une liste d'arguments triés
	FUNCTION MEDIAN (Arg1 Argn) 


MIDRANGE Moyenne arithmétique du plus petit et du plus grand des arguments fournis
	FUNCTION MIDRANGE (Arg1 Argn) 


MIN	Valeur du plus argument d'une liste ou d'un tableau (ALL)
	FUNCTION MIN (Arg1 Argn) 


MOD	Valeur entière de Arg1 modulo Arg2
	FUNCTION MOD (Arg 1 Arg 2) 

NaTIONAL-OF Fournit le caractère nationnal correspondant à Arg1 d'après le code page fourni en Arg2
	FUNCTION NaTIONAL-OF (Arg1 [Arg2]) 
 	

NUMVAL	Fournit la valeur numérique d'un argument éditable qui peut contenir des blancs en début et fin de chaîne, les signes -, +, CR, DB, . et ,
	FUNCTION NUMVAL (Arg) 


NUMVAL-C Fonction est identique à NUMVAL mais pouvant également supprimer un symbole monétaire spécifié dans Arg2 
	FUNCTION NUMVAL-C (Arg1 [Arg2])

ORD 	Fournit la position ordinale (1 à 256) dans l’alphabet correspondant à la valeur du caractère spécifé dans l’argument (cf. CHAR)
	FUNCTION ORD (Arg)
 

ORD-MAX Fournit la position ordinale dans une liste d’arguments ou d'un tableau (ALL) de l’argument qui contient la valeur maximale (cf. MAX) 
	FUNCTION ORD-MAX (Arg1 Argn) 


ORD-MIN Fournit la position ordinale dans une liste d’arguments de l’argument qui contient la valeur minimale (cf. MIN) 
	FUNCTION ORD-MIN (Arg1 Argn)

PRESENT-VALUE	Valeur approchée d’un échéancier spécifié dans Arg2 pour le taux Arg1 
	FUNCTION PRESENT-VALUE (Arg1 Arg2) 


RANDOM	Fournit un (pseudo) nombre aléatoire éventuellement d’après un argument numérique (> 0)
	FUNCTION RANDOM ([Arg]) 


RANGE	Valeur de l’argument maxi moins la valeur de l’argument mini d'une liste d’arguments ou d'un tableau (ALL)
FUNCTION RANGE (Arg1 Argn) 

REM	Reste de la division de l’argument 1 par l’argument 2 
FUNCTION REM (Arg1 Arg2) 


REVERSE	Fournit une chaîne de caractères inversée
	FUNCTION REVERSE (Arg) -> ABCD : restitué : DCBA


SIN	Sinus de l’angle ou l’arc exprimé en radians dans l’argument
	FUNCTION SIN (Arg) 

SQRT	Fournit la racine carrée de l’argument
	FUNCTION SQRT (Arg) 


STANDARD-DEVIATION	Fournit la déviation entre les différents arguments 
	FUNCTION STANDARD-DEVIATION (Arg1 Argn) 


SUM	Somme des différents arguments
	FUNCTION SUM (Arg1 Argn) 

TAN	Tangente de l’angle ou l’arc exprimé en radians dans l’argument
	FUNCTION TAN (Arg) 

UNDATE	Fenètrage (si option DATEPROC activée) : conversion d’un champ date en champ non date (cf. DATEVAL)
	FUNCTION DATE-TO-YYYYMMDD (Arg1 Arg2)

UPPER-CASE	Traduit une chaîne de caractère en majuscules
	FUNCTION UPPER-CASE (Arg) 


VARIANCE	Variation entre les différents arguments 
	FUNCTION VARIANCE(Arg1 Argn) 

WHEN-COMPILED 	Date et l’heure de compilation du programme en 21 caractères alphanumériques (même format que fonction CURRENT-DATE) 
	FUNCTION WHEN-COMPILED

YEAR-TO-YYYY	Fenètrage si option DATEPROC activée : ajout du siécle dans Arg2 d'après l'année de Arg1
	FUNCTION YEAR-TO-YYYY (Arg1 Arg2)   

YEARWINDOW	Fenètrage si option DATEPROC activée : obtention de l'année de départ du siècle correspondant à la fenètre en cours
	ex: Compute START-DATE-SSAA = Function YEARWINDOW
Homer-ac est déconnecté   Envoyer un message privé 00
Vieux 21/11/2008, 15h08   #2
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 781
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 781
Points : 2 711
Points : 2 711
Par défaut Remerciements

Je trouve ça génial et de grand Coeur. Merci pour le bon travail que tu as fait..
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé 00
Vieux 22/11/2008, 08h07   #3
Peut-êtreUneRéponse
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Senior Technical Leader
Inscription : décembre 2006
Messages : 538
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Senior Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 538
Points : 706
Points : 706
Merci
__________________
★★ Documentation Mainframe ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé 00
Vieux 10/12/2008, 15h00   #4
Homer-ac
Membre expérimenté
 
Avatar de Homer-ac
 
Inscription : octobre 2007
Messages : 449
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : octobre 2007
Messages : 449
Points : 522
Points : 522
J'ajoute quelques informations sur les routines de service Language Environment (L.E pour les intimes), par rapport à l'utilisation des fonctions COBOL.
Il serait un peu long et au final pas réellement indispensable d'expliquer chacune dans le détail.
1) La doc reste très dépendante de la version L.E. pour le Z/OS installé. Elle est à mon avis mieux faite que les doc COBOL. Surtout, largement dotée d'exemples.
2) On va retrouver des routines L.E. en alternatives au fonctions COBOL. En fait il y en a beaucoup plus.
L'intérêt par rapport aux fonctions COBOL :
1) La fiabilité : On dispose d'un code retour si une donnée est invalide ! (pour ceux qui ont fait le plein de S0C7).
2) La précision : si on prend par exemple les routines mathématiques et scienifiques : CEESx..., le x se décline en
I 32 bits binare
S 32 bits virgule flottante simple
D 64 bits virgule flottante double
Q 128 bit virgule flottante étendue
T 32 bits virgule flottante simple d'un nombre complexe
E 64 bits virgule flottante double d'un nombre complexe
R 128 bits virgule flottante étendue d'un nombre complexe
Autre exemple, si la fonction Current-date permet d'avoir l'heure en centièmes de secondes, la fonction CEELOCT la restitue en millièmes.
3) Le choix : Accessibles par les langages autres que COBOL et beaucoup plus de possibilités (routines pour gérer les problèmes (CEE3ABD, CEE3DMP ...) ou encore pour acquérir et libérer de la mémoire, convertir des données etc.

Le plus simple est de soumettre un exemple.
Pour hypothèse, un module de contrôle et de manipulation d'une date.
En COBOL l'utilisation des fonctions dates suppose que l'on ait vérifié la date en amont. Non seulement elle doit être valide, mais elle doit être usuellement au format SSAAMMJJ.
Les routines L.E permettent de facilement vérifier si une date est valide, via une conversion par un nombre de jours relatifs depuis une date pivot (date 'Lilian'), changer le format d'une date comme on le désire et en plus par fenêtrage ajouter le siècle en retour.
Le fait de transiter par cette date pivot permet au passage de faire de l'incrément ou décrément de jours sur une date (et de vérifier facilement au passage si une année est bissextile) et bien entendu de convertir dans des formats multiples.
Par exemple, masque de départ DDMMYY (JJMMAA) puis restitution YYYYDDD (SSAAQQQ)
J'espère que cet exemple donnera une indée de l'intérêt de ces routine :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
       Identification Division.                                         
        Program-Id. VERDATES.                                           
      *---------------------------------------------------------------  
      * Module COBOL exemple d'appel de fonctions intrinseques L.E.     
      * (alternative aux fonctions dates COBOL,sans risque de S0C7)     
      *---------------------------------------------------------------  
      * - RECOIT une zone de communication de 36 caractères contenant:  
      * - Zone de réception :                                           
      *   1C : Version d'appel = ' ' obligatoire (gestion évolutions)   
      *   8C : date à traiter et vérifier au format par défaut SSAAMMJJ    
      *   8C : format L.E. de la date de réception (défaut YYYYMMDD)    
      *   2C : (binary) incrément positif ou négatif de la date à       
      *        restituer au format SSAAMMJJ et SSAAQQQ                  
      *        (A zéro pour simple vérification et conversion format de la date)  
      * - Zone de restitution :                                         
      *   1C : Code retour :                                            
      *        '0' traitement OK                                        
      *        '1' date recue invalide / masque format date non conforme
      *        '2' erreur module (écrasement de données ?)              
      *        '3' version d'appel invalide (non blanc)                 
      *   8C : Date recalculée au format SSAAMMJJ                       
      *   7C : Date recalculée au format SSAAQQQ                        
      *   1C : Jour de la semaine (1 = Lundi etc ...)                   
      *---------------------------------------------------------------  
      * ! - COPY COBOL : CF. WDT-ZCOM en Linkage Section                
      *---------------------------------------------------------------  
       Environment Division.                                            
       Configuration Section.                                       
       Source-computer. z9.                                         
       Data Division.                                               
       Working-Storage Section.                                     
       01.                                                          
          05                    Pic  X(16) Value '* WSS VERDATES *'.
          05 WS-CNT             Pic  S9(4) Binary.                  
          05 WS-RC              Pic  X.                             
          05 WS-WEEKDAY         Pic  9.                             
                                                                    
      * Niveaux 01 pour les zones d'appel L.E.                      
       01 CEE-LILIAN            Pic  s9(8) Binary.                  
       01 CEE-WEEKDAY           Pic  S9(8) Binary.                  
       01 CEE-DATE.                                                 
          05 CEE-DATE-LONG      Pic  S9(4) Binary.                  
          05 CEE-DATE-DATA      Pic  X(256).                        
       01 CEE-FORM.                                                 
          05 CEE-FORM-LONG      Pic  S9(4) Binary.                  
          05 CEE-FORM-DATA      Pic  X(256).                        
      *   Codes retour L.E. (cf. COPY L.E. : CEEIGZCT)              
       01 FC.                                                       
             10 FC-COND-ID.                                         
                15 SEVERITE     Pic  S9(4) Binary.                  
                15 MSG-NO       Pic  S9(4) Binary.                  
                15              Pic   X(8).                         
                                                                    
       Linkage Section.                                             
                                                                    
       01 WDT-ZCOM.                                                     
          05 WDT-DATE-NVERS     Pic   X.                                
          05 WDT-DATE-RECUE     Pic   X(8).                             
          05 WDT-DATE-MASK      Pic   X(8).                             
          05 WDT-DATE-INCR      Pic  S9(4) Binary.                      
          05 WDT-DATE-OUT.                                              
             10 WDT-DATE-RC     Pic   X.                                
             10 WDT-DATE-SAMJ   Pic   X(8).                             
             10 WDT-DATE-SAQQ   Pic   X(7).                             
             10 WDT-DATE-JSEM   Pic   X.                                
                                                                        
       Procedure Division using WDT-ZCOM.                               
                                                                        
       MAIN Section.                                                    
           Move    '3'       to   WS-RC                                 
           If   WDT-DATE-NVERS not = space then perform RETOUR End-if   
           If   WDT-DATE-MASK not >  space                              
                Move 'YYYYMMDD'    to  CEE-FORM-DATA                    
           Else                                                         
                Move WDT-DATE-MASK to  CEE-FORM-DATA                    
           End-if                                                       
                                                                        
      * Calcul de la longueur du masque date et alimentation pour L.E   
           Move function Reverse(CEE-FORM-DATA) to CEE-DATE-DATA        
           Move 0  to WS-CNT                                            
           Inspect CEE-DATE-DATA  Tallying WS-CNT For Leading space     
           Compute CEE-FORM-LONG  = length of CEE-FORM-DATA - WS-CNT    
           Move    Space          to CEE-DATE     FC                    
           Move    CEE-FORM-LONG  to CEE-DATE-LONG                      
                                                                        
           Move    '1'       to   WS-RC                                 
           If   WDT-DATE-RECUE(1:CEE-DATE-LONG) not Numeric             
                   Perform RETOUR                                       
           End-if                                                       
           Move WDT-DATE-RECUE(1:CEE-DATE-LONG) to CEE-DATE-DATA        
                                                                        
      * Conversion date recue  en entier relatif (date LILIAN)          
           Call   'CEEDAYS' using    CEE-DATE CEE-FORM CEE-LILIAN FC    
           If FC-COND-ID NOT = LOW-VALUE    Perform RETOUR    End-if    
                                                                        
      * La date et le masque sont valides : incrément date LILIAN       
      * ---------------------------------------------------------       
           Move    '0'            to WS-RC                              
           Add     WDT-DATE-INCR  to CEE-LILIAN                         
                                                                        
      * Conversion date LILIAN en date SSAAMMJJ                         
           Move    space          to CEE-DATE FC                        
           Move    8              to CEE-DATE-LONG                      
                                     CEE-FORM-LONG                      
           Move   'YYYYMMDD'      to CEE-FORM-DATA                      
           Call   'CEEDATE' using    CEE-LILIAN CEE-FORM                
                                     CEE-DATE   FC                      
           Move CEE-DATE          to WDT-DATE-SAMJ                      
                                                                        
      * Conversion date LILIAN en date SSAAQQQ                          
           Move    space          to CEE-DATE FC                        
           Move    7              to CEE-DATE-LONG                     
                                     CEE-FORM-LONG                     
           Move   'YYYYDDD'       to CEE-FORM-DATA                     
           Call   'CEEDATE' using    CEE-LILIAN CEE-FORM               
                                     CEE-DATE   FC                     
           Move CEE-DATE          to WDT-DATE-SAQQ                     
                                                                       
      * Calcul du jour de la semaine depuis 1 = LUNDI                  
           Call   'CEEDYWK' using  CEE-LILIAN CEE-WEEKDAY FC           
           If FC-COND-ID NOT = LOW-VALUE  then                         
              Move    '2' to   WS-RC                                   
              Perform RETOUR                                           
           End-if                                                      
      *    CEEDYWK restitue de 1=Dimanche à 7=Samedi                   
      *            -On veut de 1=Lundi    à 7=Dimanche                 
           If CEE-WEEKDAY = 1                                          
              Move          7 to   CEE-WEEKDAY                         
           Else                                                        
              Subtract      1 from CEE-WEEKDAY                         
           End-if                                                      
           Move    CEE-WEEKDAY to WS-WEEKDAY                           
           Move    WS-WEEKDAY  to WDT-DATE-JSEM                        
             .                                                         
       RETOUR.                                                         
           Move ZERO to Return-Code                                    
           Move WS-RC       to WDT-DATE-RC                             
           If WS-RC > '0'   then                                       
      *    Si erreur L.E. codes retours L.E. rendus dans date sortie   
              Move FC       to WDT-DATE-SAMJ                          
           End-if                                                     
                                                                      
      *    WDT-DATE-RC est forcément numérique. Ce test évite juste   
      *    les Warning générés par COBOL pour non retour du PERFORM   
           If WDT-DATE-RC is numeric then                             
              Goback                                                  
           End-if                                                     
                 .                                                    
       End Program VERDATES.
Homer-ac est déconnecté   Envoyer un message privé 00
Discussion fermée Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h32.


 
 
 
 
Partenaires

Hébergement Web