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 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
|
IDENTIFICATION DIVISION.
PROGRAM-ID. 22rfm.
*programme
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
* declaratif du fichier de resultat
SELECT ficbrut ASSIGN TO DISK.
SELECT fictri ASSIGN TO DISK.
SELECT ficfinal ASSIGN TO DISK.
* declaratif du fichier d entree
DATA DIVISION.
FILE SECTION.
FD ficbrut LABEL RECORD STANDARD
VALUE OF FILE-ID "/wrk/ficbrut.csv".
01 fb.
02 fb-rfm10 pic X(4).
02 filler pic X(1).
02 fb-rfm8421 pic X(4).
02 filler pic X(1).
02 fb-rfmpt pic 9(3).
02 filler pic X(1).
02 fb-rfmqte pic 9(9).
SD fictri LABEL RECORD STANDARD.
01 ft.
02 ft-rfm10 pic X(4).
02 filler2 pic X(1).
02 ft-rfm8421 pic X(4).
02 filler2 pic X(1).
02 ft-rfmpt pic 9(3).
02 filler2 pic X(1).
02 ft-rfmqte pic 9(9).
FD ficfinal LABEL RECORD STANDARD
VALUE OF FILE-ID "/wrk/ficfinal.csv".
01 ff.
02 ff-rfm10 pic X(4).
02 filler3 pic X(1).
02 ff-rfm8421 pic X(4).
02 filler3 pic X(1).
02 ff-rfmpt pic 9(3).
02 filler3 pic X(1).
02 ff-rfmqte pic 9(9).
WORKING-STORAGE SECTION.
* bibliotheque sql pour cobol
Exec sql include sqlca end-exec.
Exec sql begin declare section end-exec.
exec sql include '/fr/cobol/fichier/22rfm' end-exec.
* debut des declaratifs sql
* wdbase pour ouverture bdd et environnement de travail
01 wdbase pic x.
* pour avoir message erreur avec debugage
01 ws-erreur pic -(6)9.
01 where-error pic x(72).
01 CODE-RET pic s9(9) comp-5 value 0.
01 numcli PIC x(8).
01 cdecrt Pic 9(1) value 0.
01 pt8 PIC 9(1) value 0.
01 pt4 PIC 9(1) value 0.
01 pt2 PIC 9(1) value 0.
01 pt1 PIC 9(1) value 0.
01 premcde pic 9(1) value 0.
* fin de declaratif sql
Exec sql end declare section end-exec.
* declaratif des variables autres que sql
01 i pic 9(9) value 0.
01 j pic 9(9) value 0.
01 somme pic 9(9) value 0.
01 vp8 PIC x(1).
01 vp2 PIC x(1).
01 vp4 PIC x(1).
01 vp1 PIC x(1).
01 chainerfm PIC X(4).
01 rfm10 PIC X(4) occurs 20.
01 rfm8421 PIC X(4) occurs 20.
01 rfmpt pic 9(8) occurs 20 value 0.
01 rfmqte pic 9(8) occurs 20 value 0.
* debut du programme
PROCEDURE DIVISION.
* ouverture d'environnement de la bdd
ouverturebdd.
MOVE "R" TO WDbASE.
call "opendb" using wdbase.
open output ficbrut.
open output ficfinal.
* requete sql
requetesql.
exec sql declare curseur cursor for
select *
from fqtrfm22318_prfm
END-EXEC.
* envoi des donnees sql dans un curseur
exec sql open curseur end-exec.
looping.
exec sql fetch curseur into :numcli,:cdecrt,
:pt8,:pt4,:pt2,:pt1,:premcde end-exec.
if sqlcode = 0
move numcli to 22rfm-cli
move cdecrt to 22rfm-cdecrt
move pt8 to 22rfm-pt8
move pt4 to 22rfm-pt4
move pt2 to 22rfm-pt2
move pt1 to 22rfm-pt1
move premcde to 22rfm-premcde
go to looping
else
go to end-looping.
end-looping.
looping2.
move 1 to i.
move 0 to somme.
move " " to chainerfm.
exec sql fetch curseur into :numcli,:cdecrt,
:pt8,:pt4,:pt2,:pt1,:premcde end-exec.
if sqlcode = 0
add pt8 to somme
add pt4 to somme
add pt2 to somme
add pt1 to somme
if pt8 = 0
move "0" to vp8
else move "1" to vp8.
if pt4 = 0
move "0" to vp4
else move "1" to vp4.
if pt2 = 0
move "0" to vp2
else move "1" to vp2.
if pt1 = 0
move "0" to vp1
else move "1" to vp1.
string vp8 vp4 vp2 vp1 delimited by size
into chainerfm
display chainerfm " " somme.
sousbouclei.
if (chainerfm = rfm10(i) and i < 21)
add 1 to rfmqte(i)
display chainerfm " t1 " rfmqte(i)
go to looping2
if (chainerfm not = rfm10(i)
and rfm10(i) = space and i < 21)
move chainerfm to rfm10(i)
move 1 to rfmqte(i)
move somme to rfmpt(i)
display chainerfm " t2 " rfmqte(i) " " rfmpt(i)
go to looping2
if (chainerfm not = rfm10(i)
and rfm10(i) not = space and i < 21 )
add 1 to i
go to sousbouclei
if (i >= 20)
go to looping2.
end-looping2.
move 1 to i.
sousbouclei2.
display " test 4 ".
if (i < 21)
display rfm10(i) " " rfmpt(i) " " rfmqte(i)
add 1 to i
go to sousbouclei2.
if (i = 20)
display " fin ".
end-sousbouclei2.
CLOSE ficbrut.
CLOSE ficfinal.
STOP RUN. |
Partager