Bonjour,
M'ennuyant un peu et ayant ouvert un LDD... j'ai décidé de calculer mes intérêts en COBOL !... (bon oui j'ai d'abord fait la calculatrice Windows avant...)
Et petit à petit, je me suis dit que je pouvais faire un truc assez générique si je m'y penche beaucoup.
Pour le moment je fais très simple : 1 fichier qui contient le contenu du compte, le pourcentage d'intérêts, le nom de la personne, et la description de la ligne (type de compte)
Voici donc le format d'un fichier en entrée :
Bon, avec 12000 à 1.25%, on doit obtenir à la fin 150 (facile à tester donc).0012000 001.25 TEST LDD
0000042 000000 LOLILOL Divers.
Dans ma déclaration COBOL j'ai donc :
Et en sortie ça affichera :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 FD ACCT-DATA. 01 ACCT-RECORD. 05 CURRENT-OWNED-IN PICTURE 9(7). 05 PICTURE X(1). 05 PERCENTAGE-IN PICTURE 999V99. 05 PICTURE X(1). 05 NAME-IN PICTURE X(20). 05 PICTURE X(1). 05 DESCRIPTION-IN PICTURE X(20).
[je viens de tilter que je n'ai pas mis de virgule dans le contenu du compte... on verra plus tard]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 FD TOTAL-DATA. 01 PRINT-REC. 05 NAME-OUT PICTURE X(20). 05 PICTURE X(10). 05 TOTAL-OUT PICTURE Z(7).9(2).
Mon code est très TRES similaire à celui que j'avais fais il y a quelques années et le voici :
Lors des DISPLAY de debug, je peux voir ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 IDENTIFICATION DIVISION. PROGRAM-ID. INTERETS. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. PC-I686. OBJECT-COMPUTER. PC-I686. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ACCT-DATA ASSIGN TO DISK "ACCT.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT TOTAL-DATA ASSIGN TO DISK "TOTAL.DAT" ORGANIZATION IS LINE SEQUENTIAL. SELECT SORTED-DATA ASSIGN TO DISK "SRT-TMP.DAT". * * SELECT SORTED-DATA ASSIGN TO SYSWORK. DATA DIVISION. FILE SECTION. FD ACCT-DATA. 01 ACCT-RECORD. 05 CURRENT-OWNED-IN PICTURE 9(7). 05 PICTURE X(1). 05 PERCENTAGE-IN PICTURE 999V99. 05 PICTURE X(1). 05 NAME-IN PICTURE X(20). 05 PICTURE X(1). 05 DESCRIPTION-IN PICTURE X(20). SD SORTED-DATA. 01 SORTED-RECORD. 05 CURRENT-OWNED-ST PICTURE 9(7). 05 PICTURE X(1). 05 PERCENTAGE-ST PICTURE 999V99. 05 PICTURE X(1). 05 NAME-ST PICTURE X(20). 05 PICTURE X(1). 05 DESCRIPTION-ST PICTURE X(20). FD TOTAL-DATA. 01 PRINT-REC. 05 NAME-OUT PICTURE X(20). 05 PICTURE X(10). 05 TOTAL-OUT PICTURE Z(7).9(2). WORKING-STORAGE SECTION. 01 ARE-THERE-MORE-RECORDS PICTURE XXX VALUE 'YES'. 77 CURRENT-NAME PICTURE X(20). 77 CURRENT-TOTAL PICTURE 9(7)V99. 77 CURRENT-SUM PICTURE 9(7)V99. 77 CURRENT-ENTRIES PICTURE 999. 01 IS-FIRST-ENTRY PICTURE XXX VALUE 'YES'. 88 NOT-FIRST-ENTRY VALUE 'NO '. PROCEDURE DIVISION. 100-MAIN-MODULE. SORT SORTED-DATA ON ASCENDING KEY NAME-ST OF SORTED-RECORD USING ACCT-DATA OUTPUT PROCEDURE 200-MAIN-LOOP STOP RUN. 200-MAIN-LOOP. MOVE 'YES' TO IS-FIRST-ENTRY OPEN OUTPUT TOTAL-DATA PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO' RETURN SORTED-DATA AT END MOVE 'NO ' TO ARE-THERE-MORE-RECORDS PERFORM 400-WRITE-SUM-TO-FILE PERFORM 500-WRITE-LOG NOT AT END PERFORM 300-COUNT-ROUTINE END-RETURN END-PERFORM CLOSE TOTAL-DATA. 300-COUNT-ROUTINE. DISPLAY "Current money : " CURRENT-OWNED-ST DISPLAY "Percentage : " PERCENTAGE-ST DISPLAY "Name temp : " NAME-ST IF IS-FIRST-ENTRY = 'YES' * * Premiere iteration, on initialize tout MOVE NAME-ST TO CURRENT-NAME MOVE 0 TO CURRENT-TOTAL MOVE 1 TO CURRENT-ENTRIES MOVE 'NO ' TO IS-FIRST-ENTRY ELSE IF NAME-ST = CURRENT-NAME * * 2e iteration ou plus dans un meme bloc de nom * * On ajoute la depense associee MULTIPLY CURRENT-OWNED-ST BY PERCENTAGE-ST GIVING CURRENT-SUM ADD CURRENT-SUM TO CURRENT-TOTAL ADD 1 TO CURRENT-ENTRIES ELSE * * On change de nom, donc on ecrit PERFORM 400-WRITE-SUM-TO-FILE * * On reinitialize avec le nouveau nom MOVE NAME-ST TO CURRENT-NAME MOVE 0 TO CURRENT-TOTAL MOVE 1 TO CURRENT-ENTRIES END-IF END-IF. 400-WRITE-SUM-TO-FILE. MOVE SPACES TO PRINT-REC MOVE CURRENT-NAME TO NAME-OUT MOVE CURRENT-TOTAL TO TOTAL-OUT WRITE PRINT-REC. 500-WRITE-LOG. MOVE "-------------------------------------" TO PRINT-REC WRITE PRINT-REC. END PROGRAM INTERETS.
Pourquoi y a-t-il un 001..2 au lieu d'un 001.25 ?Current money : 0012000
Percentage : 001..2
Name temp : TEST
Current money : 0000042
Percentage : 000.00
Name temp : LOLILOL
Le nom est décalé d'une espace du coup... (car le 5 passe en X(1) )
Merci de m'éclairer !
Je pense que ça vient de ma déclaration 999V99, mais je n'ai pas encore bien compris comment gérer les V , et .
Partager