« Cobol ANS 74 » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Généralités : fractionnement
→‎Structure générale : fractionnement
Ligne 2 :
{{à fractionner}}
{{Cobol ANS 74}}
= Structure générale =
=== 4 Divisions par Programme ===
<pre>
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG.
AUTHOR. AUT.
ENVIRONMENT DIVISION.
SOURCE-COMPUTER. CPU1.
OBJECT-COMPUTER. CPU1.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ...
DATA DIVISION.
FILE SECTION.
FD FNOM LABEL RECORD STANDARD/OMITTED
01 FENR.
02 NOM1 PIC X(10).
WORKING-STORAGE SECTION.
66 NOM RENAMES NOMA THRU NOMB.
77 INDEP PIC X(10)
88 IND-OK VALUES 1 THRU 10.
88 IND-KO VALUES 11 THRU 20.
PROCEDURE DIVISION.
</pre>
 
=== Elements du Cobol ===
* Identificateurs (nom var, f., paragraphes)
:[A-Z][0-9][-]
:ex.: 128A 128 -ABC IF NUM.ART total
* Constantes
**Numeriques: [0-9], . (jamais à droite),+- (tjs devant)
ex.: .0 <s>13.34.56</s> -.45 <s>.+65</s> <s>-12.</s>
**Alphabetiques: "..." ""->1"
**Figuratives: prédéfinies (tout numérique sauf 0 = alphanumerique).
:{zero, zeros, zeroes} :0
:{space, spaces} :
:{quote,quotes} : "
:{high-value, high-values} : met plus grande valeur que var peut recevoir
:{low-value, loww-values} : met plus petite valeur que var peut recevoir
:ALL : demande de repeter const non numerique
 
ex: ZERO(alphanum) // "ZERO"(alpha) // 0(num) // 0.0(num) // ALL ZERO(alpha) // ALL "ZERO"(alpha) // <s>ALL (0(doit être non num))</s>
 
=== Clauses ===
<b>PICTURE [V 9 X A]</b>
<pre>
77 A PIC 9(4)V99; VALUE 193654 >> |1|9|3|6|.|5|4|
77 B PIC X(3)XX; VALUE "A24ZE" >> |A|2|4|Z|E|
77 C PIC A;VALUE "Z" >> |A|
</pre>
<b>EDITION</b> [. , / B 0] // [+ - $ CR DB] // [Z *] // [+ - $]
<b>SIGN // {LEADING/TRAILING} SEPARATE</b>
<pre>
77 A PIC S999;LEADING SEPARATE. (- devant)
77 B PIC S999;TRAILING SEPARATE. (- derriere)
77 C PIC S999;LEADING. (¢ devant)
77 D PIC S999;TRAILING. (¢ derriere)
</pre>
<b>VALUE</b>
<pre>77 A PIC 999; VALUE 199.</pre>
<b>USAGE // {DISPLAY/COMP}</b>
<pre>
77 B PIC 999;DISPLAY. (sauvé en car)
77 B PIC 999;COMP-0/3. (sauvé en bin).
</pre>
<b>REDEFINE</b>
<pre>
01 MONTANT PIC 9(4)V99.
01 REDEF REDEFINES MONTANT.
02 EURO PIC 9(4).
02 CENT PIC 99.
01 A REDEFINES MONTANT PIC 9(6).
</pre>
<b>RENAMES</b>
<pre>
66 NM RENAMES NB1 THRU DEF1.
</pre>
<b>FILLER // Var</b>
<pre>
01 ENREG.
02 FILLER PIC X(30).
02 CP PIC 9(4).
02 FILLER PIC X(6).
88 OK VALUE SPACE.
</pre>
<b>BLANK WHEN ZERO</b>
<pre>
77 A PIC 999; BLANK ZERO; VALUE ZERO.
77 B PIC ZZ9; BLANK ZERO; VALUE ZERO.
A<->" "/B<->" "
</pre>
 
=== Nombre niveau ===
*reservé
:66 champ renommé
:77 champ indépendant (non groupé)
:88 réservé aux noms-conditions (vrai/faux)
*de groupage
01 ARTICLE.
02 DESCRIPTION PIC X(10).
03 CODE-MAGASIN PIC XXX.
03 NUMERO-COULEUR PIC 99.
 
=== EXPR ARITHMETIQUE ===
[+ - * / **(exp)]
COMPUTE A, C = A*(B**-3). // A=A*(B**-3), C=A*(B**-3) //
=== INSTRUCTIONS ===
==== élémentaires ====
*ACCEPT [VAR]
*MOVE (X) TO D, E, F, G, H.
 
*OPERATION
:ADD (X) TO A, B.
:ADD (X) GIVING C, D.
:-> X : somme // X+A>A, X+B>B, X>C, X>D
:SUBTRACT (X) FROM A, B.
:SUBTRACT (X) FROM x1 GIVING C, D.
:-> X : somme // A-X>A, B-X>B, x1-X>C, x1-X>D
:MULTIPLY x1 BY A, B.
:MULTIPLY x1 BY x2 GIVING C, D.
:-> x1*A>A, x1*B>B, x1*x2>C, x1*x2>D
:DIVIDE x1 INTO A, B.
:DIVIDE x1 {INTO/BY} x2 GIVING C, D REMAINDER E.
:-> A/x1>A, B/x1>B, x2/x1>C (into), x2/x1>D (into), x1/x2>C (by), x1/x2>D (by), x1-x2*D>E (reste)
 
:OPT / ROUNDED : +5 au premier digit décimal non inclu
<pre>
77 A PIC 99V99; VALUE 23.43.
77 B PIC 99V99; VALUE 35.56.
77 C PIC 99V9.
</pre>
:-> A+B=58.99
:ADD A,B GIVING C.
:-> c = |5|8|9| = 58.9
:ADD A,B GIVING C ROUNDED.
:-> c(Rounded) = 58.99 + .05 = 59.04 = |5|9|0| = 59.0
 
:OPT / ON SIZE ERROR = Sur partie entière, si champ trop petit, le champ n'est pas rempli et exec d'instruction.
<pre>
77 A PIC 999; VALUE 876.
77 B PIC 999; VALUE 150.
77 C PIC 999.
</pre>
:ADD A, B GIVING C; ON SIZE ERROR [instruction].
:-> A+B=1026 - trop grand pour C >> exec d'instruction
 
==== de contrôle ====
IF [c1] [ins]
ELSE IF [c2] [ins]
ELSE [ins]
 
*Condition de relation
[= < > <= >=]
... [NOT]= ...
... [NOT]> ...
... [NOT]< ...
*Condition de classe
... [NOT] {numeric/alphabetic}
*Condition de signe
... [NOT] {POSITIVE/NEGATIVE/ZERO}
*Condition de nom-condition
77 ETAT-CIVIL PIC 9.
88 CELIBATAIRE VALUE 1.
88 MARIE VALUE 2.
88 DIVORCE VALUE 3.
88 VEUF VALUE 4.
88 ETAT-CIVIL-FAUTIF VALUES ARE 0, 5 THRU 9.
88 SANS-CONJOINT VALUES ARE 1, 3, 4.
ETAT-CIVIL-FAUTIF si 0,5,6,7,8,9 (vrai) sinon (faux)
*Condition composée
[( ) NOT AND OR]
IF MARIE AND FEMME OR (AGE > 30).
*Condition de relation simplifiee
IF A=B OR A=C OR A>D
IF A=B OR =C OR >D
IF A=B OR C OR >D
 
=== Feuille de programme ===
Feuille à 80 colonnes issue du modèle des cartes perforées.
 
Structure :
*1->6 : Num de séquence (facultatif)
*7 : Indicateur (*(cmt) /(cmt+nl) -(merge))
*8->72 : Ecriture du PRG (marge A : 8->11, marge B : 12->72)
*73->80 : Identification
 
=== Symboles ===
 
. Le point ferme l'instruction en Cobol et il est suivi d'un espace.
IF A = B MOVE 1 TO C
ELSE MOVE 3 TO C
MOVE 1 To B D.
,; (facultatif) séparateur pour clarifier la notation
ELSE MOVE 3 TO C;
MOVE 1 TO B, D.
 
= Bases du COBOL =
= Divisions, sections, paragraphes =