Bonjour,
Est-ce possible d'obtenir la valeur maximum d'une zone d'un fichier via un SORT?
D'avance merci.
a plus
ted
Bonjour,
Est-ce possible d'obtenir la valeur maximum d'une zone d'un fichier via un SORT?
D'avance merci.
a plus
ted
Plutôt par ICETOOL, facilement si c'est une zone numérique. exemple :
Les valeurs mini et maxi des zones MONTANT (col. 50 sur 6 Octets) et QUANTITE seront éditées en fin d'état pour cet exemple simpliste, sans rupture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //TOOLIN DD * DISPLAY FROM(IN1) LIST(REPORT) BLANK TITLE('LISTE DES PRODUITS') PAGE DATE HEADER('LIBELLE') ON(01,40,CH) HEADER(MONTANT) ON(50,6,ZD,C3) HEADER(QUANTITE) ON(60,4,ZD,C3) MAXIMUM('MAXIMUM') MINIMUM('MINIMUM') /*
Bonjour et merci pour ce début de réponse.
Cependant, je ne connais pas du tout ICETOOL.
quelle partie du code donne le maximium? le minimum?
D'avance merci.
Un JCL pour l'éxemple :
Les commandes de l'exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 //STEP1 EXEC PGM=ICETOOL,REGION=2M //TOOLMSG DD SYSOUT=* //DFSMSG DD SYSOUT=* //REPORT DD SYSOUT=* //IN1 DD DISP=SHR,DSN=MON.FICHIER //TOOLIN DD *
DISPLAY liste simple FROM(DDname-input) LIST(DDname-output)
HEADER(nom-de-colonne) ON(position,longueur,format et masque d'édition éventuel)
MAXIMUM('intitulé pour le maxi') MINIMUM(....)
Le simple fait d'indiquer MAXIMUM ou MINIMUM provoque l'édition des valeurs pour toutes des données de format numérique en fin d'état.
C'est un exemple au plus simple facile à tester. ICETOOL offre un très grand nombre de possibilités, trop même pour une présentation rapide plus détaillée.
Pour exemple et sans icetools, mais moins évident
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 //STEP1 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //DFSMSG DD SYSOUT=* //REPORT DD SYSOUT=*,LRECL=100 //SORTIN DD * ABCDE12345A111111111111111111111111111111111111111111111 ABCDE 1A1 ABCDF 5 ABCDF 7 ZBCDF 7 ABCDF 7 //SYSIN DD * SORT FIELDS=(1,5,CH,A) OUTFIL FNAMES=REPORT, HEADER1=(2:'CODE', 10:' COUNT', 20:' TOTAL', 30:'MINIMUM', 40:'MAXIMUM', 50:'MOYENNE'), SECTIONS=(01,05,SKIP=0L, TRAILER3=(2:01,05, 10:COUNT, 20:TOT=(006,5,ZD,LENGTH=08), 30:MIN=(006,5,ZD,LENGTH=08), 40:MAX=(006,5,ZD,LENGTH=08), 50:AVG=(006,5,ZD,LENGTH=08))), NODETAIL,REMOVECC /* //* NODETAIL,REMOVECC,OVERLAY=(100:X) //* SI LE LRELC DU FICHIER EN SORTIE //* EST PLUS GRAND QUE LE LRECL DU FICHIER EN ENTREE //* UTILISER BUILD, OVERLAY, IFTHEN, OU IFOUTLEN //* INFO SUR MESSAGE "ICE230A" DE DFSORT //*
Toujours ICETOOL, mais encore plus simple que l'opérateur DISPLAY, l'opérateur STATS :
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //ICETOOL EXEC PGM=ICETOOL,REGION=1024K //TOOLMSG DD SYSOUT=* //DFSMSG DD SYSOUT=* //TOOLIN DD * STATS FROM(INDD) ON(1,2,ZD) //INDD DD * 01 99 05
Et le résultat :
Attention cependant à bien décrire la zone numérique à analyser ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ICE628I 0 RECORD COUNT: 000000000000003 ICE607I 0 STATISTICS FOR (1,2,ZD) : ICE608I 0 MINIMUM: +000000000000001, MAXIMUM: +000000000000099 ICE609I 0 AVERAGE: +000000000000035, TOTAL : +000000000000105 ICE602I 0 OPERATION RETURN CODE: 00
ou:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //SORT EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD * //SORTOUT DD SYSOUT=* //FICREST DD SYSOUT=* //SYSIN DD * SORT FIELDS=(1,5,CH,D) OUTFIL STARTREC=1,ENDREC=1,OUTREC=(1,5) /*
... Variante ( ICETOOL et STATS) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //ICETOOL EXEC PGM=ICETOOL,REGION=1024K //TOOLMSG DD SYSOUT=* //DFSMSG DD SYSOUT=* //TOOLIN DD * STATS FROM(INDD) ON(1,2,ZD) LMSG //INDD DD * 01 99 05
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ICE628I 0 RECORD COUNT: 000000000000003 ICE607I 0 STATISTICS FOR (1,2,ZD) : ICE648I 0 MINIMUM: +0000000000000000000000000000001 ICE648I 1 MAXIMUM: +0000000000000000000000000000099 ICE648I 2 AVERAGE: +0000000000000000000000000000035 ICE648I 3 TOTAL : +0000000000000000000000000000105 ICE602I 0 OPERATION RETURN CODE: 00
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager