IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

[zOS] Portage PC -> MVS + SORT, FASTSRT, USING/GIVING


Sujet :

Cobol

  1. #1
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut [zOS] Portage PC -> MVS + SORT, FASTSRT, USING/GIVING
    Bonsoir,

    Je suis en train d'adapter le code que j'avais fait l'an dernier (cf ce topic) pour z/OS !

    Déjà, j'ai dû réindenter le code pour m'adapter aux marges... (cela a en partie modifié la forme)
    Mais surtout : entre OpenCOBOL sur Windows et Enterprise COBOL for z/OS 4.1.0 (IGYCRCTL), il y a un fossé !

    Bref, j'ai commencé par revoir le FILE-CONTROL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FILE-CONTROL.                                      
             SELECT BUYER-DATA ASSIGN TO DEPENS.       
             SELECT TOTAL-DATA ASSIGN TO SORTIE.       
             SELECT SORTED-DATA      ASSIGN TO SYSWORK.
    Puis le FILE-SECTION :
    (mon fichier en entrée sera évidemment un RECFM=FB)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FD  BUYER-DATA          
        RECORDING MODE IS F.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FD  TOTAL-DATA           
        RECORDING MODE IS F.
    Ensuite : le compilo m'a proposé d'ajouter l'option FASTSRT pour améliorer la compilation, ce que j'ai fais !
    Mais maintenant j'ai :
    IGYPG3126-I File "BUYER-DATA" in the "USING" phrase of the "SORT" statement was
    accepted as being eligible for the "FASTSRT" compiler option.

    IGYPG3132-I The "GIVING" phrase was not specified for the "SORT" statement. The
    "OUTPUT PROCEDURE" was ineligible for the "FASTSRT" compiler option.
    Tout cela me génère un JCL ERROR... et je ne comprends pas pourquoi...
    Je peux inclure intégralement le code modifié (pour z/OS), et le JCL d'appel si cela s'avère nécessaire.

    PS : ce topic est également très lié à celui-ci, mais comme il s'agit d'un problème "technique" à COBOL, plus qu'au JCL, je poste ici aussi !
    Je serai par contre intéressé pour connaitre le DD name nécessaire pour le SD !
    (Et comme dit sur l'autre topic, je fais ceci purement dans un but de curiosité/pré-apprentissage dans mon coin...)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Amha, tu devrais poster les descriptions des fichiers en entrée et de tri, le pavé qui contient le SORT (du moins en ce qui me concerne), le JCL et l'erreur dans le JCL.

  3. #3
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Le JCL :
    METAL.MALIB.JCL(COBC)
    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
    //COBCOMP  JOB CLASS=A,MSGLEVEL=(1,1),MSGCLASS=1,REGION=0M,     
    //         NOTIFY=&SYSUID,TIME=30                               
    //  SET FICHIER=CHICOU$Z                                        
    //*                                                             
    //* *********************************************************   
    //* * COMPILE IGYCRCTL ''                                   *   
    //* *********************************************************   
    //*                                                             
    //COMPILE  EXEC PGM=IGYCRCTL,                                   
    //         PARM='DYN,DATA(31),LIST,NOOFF,FASTSRT'               
    //STEPLIB  DD   DSNAME=IGY410.SIGYCOMP,DISP=SHR                 
    //SYSPRINT DD   SYSOUT=*                                        
    //SYSLIN   DD   DSN=METAL.MALIB.OBJ(&FICHIER),DISP=SHR          
    //SYSUT1   DD   UNIT=3390,SPACE=(CYL,(1,1))                     
    //SYSUT2   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSUT3   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSUT4   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSUT5   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSUT6   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSUT7   DD   UNIT=3390,SPACE=(CYL,(1,1))                          
    //SYSIN    DD   DSN=METAL.MALIB.COBOL(&FICHIER),DISP=SHR             
    //*                                                                  
    //* ************************************************************     
    //* * LINK IEWL ''                                             *     
    //* ************************************************************     
    //*                                                                  
    //LINK     EXEC PGM=IEWL,PARM='OPTIONS=OPTS'                         
    //OPTS DD *                                                          
         AMODE=31,MAP                                                    
         NORENT,DYNAM=DLL                                                
    	 CASE=MIXED                                          
    /*                                                       
    //SYSLIB   DD   DSN=SYS1.COB2LIB,DISP=SHR                
    //         DD   DSN=SYS1.COB2COMP,DISP=SHR               
    //SYSLMOD  DD   DSN=METAL.MALIB.OUT(&FICHIER),DISP=SHR   
    //SYSTERM  DD   SYSOUT=*                                 
    //SYSPRINT DD   SYSOUT=*                                 
    //SYSLIN   DD   DSN=METAL.MALIB.OBJ(&FICHIER),DISP=SHR
    Le code :
    METAL.MALIB.COBOL(CHICOU$Z) :
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    ----+----1----+----2----+----3----+----4----+----5----+----6----+----7-
           IDENTIFICATION DIVISION.                                        
           PROGRAM-ID. DEPENSES.                                           
                                                                           
                                                                           
           ENVIRONMENT DIVISION.                                           
           CONFIGURATION SECTION.                                          
           SOURCE-COMPUTER. MVS.                                           
           OBJECT-COMPUTER. MVS.                                           
                                                                           
           INPUT-OUTPUT SECTION.                                           
           FILE-CONTROL.                                                   
                    SELECT BUYER-DATA ASSIGN TO DEPENS.                    
                    SELECT TOTAL-DATA ASSIGN TO SORTIE.                              
                    SELECT SORTED-DATA      ASSIGN TO SYSWORK.              
          * SYSWORK = zone de travail "interne" a l OS/COBOL                
          * Mais n est pas toujours present sur PC                          
                                                                            
                                                                            
           DATA DIVISION.                                                   
           FILE SECTION.                                                    
           FD  BUYER-DATA                                                   
               RECORDING MODE IS F.                                         
           01  PEOPLE-RECORD.                                               
               05 NAME-IN   PICTURE X(20).                                  
               05 MONEY-SPENT-IN  PICTURE 9999V99.                          
               05   PICTURE X(1).                                                                                        				
               05 DATE-RECORD.                                             
                  06 DAY-IN  PICTURE 99.                                   
                  06 MONTH-IN  PICTURE 99.                                 
                  06 YEAR-IN  PICTURE 9999.                                
                                                                           
           SD  SORTED-DATA.                                                
           01  SORTED-RECORD.                                              
               05 NAME-ST   PICTURE X(20).                                 
               05 MONEY-SPENT-ST  PICTURE 9(4)V99.                         
               05   PICTURE X(1).                                          
               05 DATE-ST.                                                 
                  06 DAY-ST  PICTURE 99.                                   
                  06 MONTH-ST  PICTURE 99.                                 
                  06 YEAR-ST  PICTURE 9999.                                
                                                                           
           FD  TOTAL-DATA                                                  
               RECORDING MODE IS F.                                           
           01  PRINT-REC.                                                   
               05 NAME-OUT  PICTURE X(20).                                  
               05   PICTURE X(10).                                          
               05 TOTAL-OUT  PICTURE ZZZZ.99.                               
                                                                            
           WORKING-STORAGE SECTION.                                         
           01  ARE-THERE-MORE-RECORDS PICTURE XXX VALUE 'YES'.              
           77  CURRENT-NAME  PICTURE X(20).                                 
           77  CURRENT-SUM   PICTURE 9(4)V99.                               
           77  CURRENT-AVERAGE  PICTURE 9(4)V99.                            
           77  CURRENT-AV-ENTRIES  PICTURE 999.                             
           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 BUYER-DATA                                       
                OUTPUT PROCEDURE 200-AFTER-SORT                            
               STOP RUN.                                                   
                                                                           
           200-AFTER-SORT.                                                 
               MOVE 'YES' TO IS-FIRST-ENTRY                                
               OPEN OUTPUT TOTAL-DATA                                      
               PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'                 
          * Ceci est un commentaire... COL7 a * == commentaire             
          *      READ SORTED-DATA                                                               
          * On ne READ pas un SORT                                        
                  RETURN SORTED-DATA                                      
                AT END                                                    
                  MOVE 'NO ' TO ARE-THERE-MORE-RECORDS                    
                  PERFORM 400-WRITE-SUM-TO-FILE                           
                  PERFORM 500-TOTAL-AVERAGE-TO-FILE                       
                NOT AT END                                                
                  PERFORM 300-COUNT-ROUTINE                               
                    END-RETURN                                            
                    END-PERFORM                                           
                    CLOSE TOTAL-DATA.                                     
                                                                          
           300-COUNT-ROUTINE.                                             
          *     DISPLAY "Name temp : " NAME-ST                            
          *     DISPLAY "Money : " MONEY-SPENT-ST                         
               IF IS-FIRST-ENTRY = 'YES'                                  
          *         Premiere iteration, on initialize tout                	               
                  MOVE NAME-ST TO CURRENT-NAME                             
                  MOVE MONEY-SPENT-ST TO CURRENT-SUM                       
                  MOVE 1 TO CURRENT-ENTRIES CURRENT-AV-ENTRIES             
                  MOVE 0 TO CURRENT-AVERAGE                                
                  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                             
                      ADD MONEY-SPENT-ST TO CURRENT-SUM                    
                      ADD 1 TO CURRENT-ENTRIES                             
                  ELSE                                                     
          *             On change de nom, donc on calcule et on ecrit      
                      PERFORM 400-WRITE-SUM-TO-FILE                        
                      ADD CURRENT-SUM TO CURRENT-AVERAGE                   
                      ADD 1 TO CURRENT-AV-ENTRIES                                                  
          *      On reinitialize avec le nouveau nom                      
                      MOVE NAME-ST TO CURRENT-NAME                        
                      MOVE MONEY-SPENT-ST TO CURRENT-SUM                  
                      MOVE 1 TO CURRENT-ENTRIES                           
                  END-IF                                                  
               END-IF.                                                    
                                                                          
           400-WRITE-SUM-TO-FILE.                                         
          *     move space permet de mettre les espaces ou il faut        
               MOVE SPACES TO PRINT-REC                                   
               MOVE CURRENT-NAME TO NAME-OUT                              
               MOVE CURRENT-SUM TO TOTAL-OUT                              
               WRITE PRINT-REC.                                           
                                                                          
           500-TOTAL-AVERAGE-TO-FILE.                                     
               ADD CURRENT-SUM TO CURRENT-AVERAGE                                             
               DIVIDE CURRENT-AV-ENTRIES INTO CURRENT-AVERAGE            
               MOVE "-------------------------------------" TO PRINT-REC 
               WRITE PRINT-REC                                           
               MOVE SPACES TO PRINT-REC                                  
               MOVE "TOTAL AVERAGE       " TO NAME-OUT                   
               MOVE CURRENT-AVERAGE TO TOTAL-OUT                         
               WRITE PRINT-REC.                                          
                                                                         
           END PROGRAM DEPENSES.
    Après le submit du JCL :
    05.21.23 JOB00071 $HASP165 COBCOMP ENDED AT N1 - JCL ERROR CN(INTERNAL)
    ***
    L'erreur en SDSF st :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      000060                PROCEDURE DIVISION.                                     
      000061                100-MAIN-MODULE.                                        
      000062                    SORT SORTED-DATA ON ASCENDING KEY NAME-ST OF SORTED-
                                                                                    
    ==000062==> IGYPG3126-I File "BUYER-DATA" in the "USING" phrase of the "SORT" statement was
                            accepted as being eligible for the "FASTSRT" compiler option.
                                                                                    
    ==000062==> IGYPG3132-I The "GIVING" phrase was not specified for the "SORT" statement. The
                            "OUTPUT PROCEDURE" was ineligible for the "FASTSRT" compiler option.
                                                                                    
      000063                         USING BUYER-DATA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -Messages    Total    Informational    Warning    Error    Severe    Terminating
    0Printed:       2           2
    Je n'ai pas encore alloué les datasets en entrée, mais en gros cela sera comme dans le topic précédent. (nom - dépense - date formattée)
    J'allouerai probablement un Fixe Blocked avec enregistrement de taille 80... (les VSAM, les KSDS, etc... je verrai plus tard)

    EDIT : et je vous fait travailler un 1er mai... honte à moi ! :p
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  4. #4
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut

    Pour ma part, côté purement Cobol, je ne vois rien qui cloche, d'autant plus que les messages d'erreurs relevées par le compilateur sont juste des messages d'infos. Pour le JCL et les spécificités de l'Entreprise Cobol, il faudrait attendre qu'un mainframe passe par ici, à moins d'essayer la compilation sans l'option FASTSRT dans le PARM='DYN,DATA(31),LIST,NOOFF,FASTSRT'.

    J'ai l'habitude, bien que cela ne soit pas obligatoire, de mettre un nom de section dans les INPUT et OUTPUT PROCEDURE.

  5. #5
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Le problème, c'est que quand je retire l'option FASTSRT... j'ai toujours un JCL error... avec ça :

    000062 SORT SORTED-DATA ON ASCENDING KEY NAME-ST OF SORTED-

    ==000062==> IGYPG3134-I File "BUYER-DATA" in the "USING" phrase of the "SORT" statement would
    have been eligible for the "FASTSRT" compiler option.

    000063 USING BUYER-DATA
    Je me suis douté que ça n'était pas "grave" (ni error, ni warning...), mais cela m'étonne qu'il y ait un problème...
    Peut être qu'il s'agit de mon IEWL qui devrait être un HEWL... mais là en effet, c'est bien un COBOListe Mainframeux qui pourrait m'aider ! ^^'


    Merci en tout cas de revalider mon code !

    Qu'entendez-vous par "nom de section" dans INPUT et OUTPUT ?


    EDIT : Idiot que je suis...
    Comme les JCL et JES sont TRES TRES verbeux, je saute beaucoup trop de lignes...
    Merci à vous de m'avoir confirmé que le code était OK... j'ai ainsi lu un peu plus de texte et voir un peu avant la partie détaillée de la compilation :
    IEF373I STEP/COMPILE /START 2013121.0723
    IEF374I STEP/COMPILE /STOP 2013121.0723 CPU 0MIN 00.92SEC SRB 0MIN 00.11S
    IEF212I COBCOMP LINK SYSLIB - DATA SET NOT FOUND
    IEF272I COBCOMP LINK - STEP WAS NOT EXECUTED.
    IEF373I STEP/LINK /START 2013121.0723
    IEF374I STEP/LINK /STOP 2013121.0723 CPU 0MIN 00.00SEC SRB 0MIN 00.00S
    Donc problème purement z/OS...

    Dès que c'est réglé, s'il y a un problème de DD ou autre à l'exécution, je reposterai ici...
    Merci encore !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  6. #6
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par Metalman Voir le message
    ...
    Qu'entendez-vous par "nom de section" dans INPUT et OUTPUT ?
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SORT ... 
    INPUT PROCEDURE ENTREE OUTPUT PROCEDURE SORTIE.*
    .../...
    ENTREE SECTION.
    .../...
    SORTIE SECTION.
    Mais cela n'a pas d'importance dans l'Entreprise Cobol

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    IGYPG3134-I File "BUYER-DATA" in the "USING" phrase
    Le "I" qui suit le numéro du message d'erreur indique que c'est un message de nature "INFORMATIONAL", donc rien de grave ...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 23
    Points
    23
    Par défaut
    bonjour,

    L'option FASTSRT permet d'accélérer le tri,
    pour que cette option soit valide, le tri interne ne DOIT PAS utiliser les EXIT 15 et 35, c'est à dire : INPUT PROCEDURE et/ou OUTPUT PROCEDURE.

    Il faut donc obligatoirement utiliser les clauses USING et GIVING

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SORT SD-Fichier
         ASCENDING KEY SD-critère-de-tri
         USING  FD-fichier-entrée
         GIVING FD-Fichier-sortie.
         IF SORT-RETURN NOT = 0
             DISPLAY "ERREUR TRI".
    ensuite ouvrez en INPUT FD-Fichier-Sortie, et effectuez votre traitement.
    (et READ pour lire les enregistrements)

    Au niveau du JCL il faudra avoir une carte DD pour le fichier ENTREE une autre pour le fichier SORTIE, pas besoin de carte DD pour le fichier SD.
    Pas besoin non plus de carte DD pour la SYSIN du tri, la carte de contrôle SORT FIELDS est générée par le programme cobol.

    Lorsque le tri intervient directement en début de programme, comme dans votre exemple, le mieux serait de trier le fichier à traiter par un tri externe.

  9. #9
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Hmmm... il faudra donc un 3e FD dans mon code, non ? Mon fichier de sortie n'a absolument pas la même forme que ceux en entrée (il contient en fait la moyenne des dépenses de chaque personne et la moyenne totale, et non plus un listing de dépenses)

    Je résume, pour l'utilisation du FASTSRT :
    FD BUYER-DATA (en entrée)
    FD TEMPORAIRE (sortie du tri, entrée de la suite)
    FD TOTAL-DATA (la sortie finale)

    Dans ce cas, je devrais donc lire le FD TEMPORAIRE, et non plus le SD pour faire mes traitements, si ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  10. #10
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Amha, il ne faudrait pas chercher côté SORT,
    - on sait que les messages du compilateur sur l'instruction SORT et concernant FASTSRT sont des messages d'information
    - qu'on peut aussi bien utiliser indifféremment des fichiers et/ou des procédures en entrée et en sortie

    Par contre l'erreur est ici et est clairement indiquée et relevée par notre ami Metalman :
    IEF212I COBCOMP LINK SYSLIB - DATA SET NOT FOUND

  11. #11
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Oui oui ! Je vais me pencher dessus...

    Mais si je peux avoir un fast sort en prime, ça serait mieux !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 23
    Points
    23
    Par défaut
    Non, il n'est pas nécessaire de rajouter un autre Fichier dans votre programme.
    Si cobol génère automatiquement la carte SORT FIELDS, rien ne vous empêche d'ajouter d'autres cartes de contrôles pour le SORT, par exemple vous pouvez utiliser des INCLUDE, OMIT, SUM, INREC et OUTFIL, pour modifier le format du fichier en sortie de tri, et le SUM permet de cumuler les montants (TOTAL-OUT) pour tous les enregistrements ayant un même critère (NAME-OUT dans votre cas).
    Pour cela il faudra rajouter une carte DD dans le step d'execution du programme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //SORTCNTL  DD *
         INREC
         OUTREC
         SUM
    /*
    Pour cela, il vous faudra consulter la Documentation DFSORT et PROGRAMMERS GUIDE, étant à la retraite depuis 6 ans, je n'ai plus en tête tout ces paramètres.

  13. #13
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par iefbr14 Voir le message
    Non, il n'est pas nécessaire de rajouter un autre Fichier dans votre programme.
    Si cobol génère automatiquement la carte SORT FIELDS, rien ne vous empêche d'ajouter d'autres cartes de contrôles pour le SORT, par exemple vous pouvez utiliser des INCLUDE, OMIT, SUM, INREC et OUTFIL, pour modifier le format du fichier en sortie de tri, et le SUM permet de cumuler les montants (TOTAL-OUT) pour tous les enregistrements ayant un même critère (NAME-OUT dans votre cas) ...
    Même si c'est possible techniquement, je ne sais pas si l'idée de "mélanger" du COBOL avec des ordres de contrôles directement issus du DFSORT est une bonne idée en terme de clarté et de maintenance ...

    De plus, il ne faut pas se focaliser sur l'instruction SORT du COBOL. Elle existe bien sûr et tout cours sur le langage se doit de la mentionner. Mais encore une fois, sur les "grands" sites z/OS on utilise plutôt le tri externe (DFSORT ou SYNCSORT) qui reste un outil d'une redoutable efficacité avec aussi un ensemble de paramètres très complets ...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 23
    Points
    23
    Par défaut
    Tout à fait d'accord avec vous.
    De toute ma carrière j'ai dû utiliser 2/3 fois le tri interne, et j'ai constaté que cela ne facilitait pas la maintenance des programmes qui en comportaient.
    J'ai d'ailleurs conseillé d'utiliser un tri externe lors de mon premier message.

  15. #15
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Bon... ça a compilé et ça a linké !
    J'ai enfin un binaire issu de la compilation COBOL en sortie dans mon METAL.MALIB.OUT !

    Voici le JCL que j'ai utilisé :

    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
    //COBCOMP  JOB CLASS=A,MSGLEVEL=(1,1),MSGCLASS=1,REGION=0M,  
    //         NOTIFY=&SYSUID,TIME=30                            
    //  SET FICHIER=CHICOU$Z                                     
    //*                                                          
    //* *********************************************************
    //* * COMPILE IGYCRCTL 'DYN,DATA(31),LIST,NOOFF,NOFASTSRT'  *
    //* *********************************************************
    //*                                                          
    //COMPILE  EXEC PGM=IGYCRCTL,                                
    //         PARM='DYN,DATA(31),LIST,NOOFF,NOFASTSRT'          
    //STEPLIB  DD   DSNAME=IGY410.SIGYCOMP,DISP=SHR              
    //SYSPRINT DD   SYSOUT=*                                     
    //SYSLIN   DD   DSN=METAL.MALIB.OBJ(&FICHIER),DISP=SHR       
    //SYSUT1   DD   UNIT=3390,SPACE=(CYL,(1,1))                           
    //SYSUT2   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSUT3   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSUT4   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSUT5   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSUT6   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSUT7   DD   UNIT=3390,SPACE=(CYL,(1,1))                         
    //SYSIN    DD   DSN=METAL.MALIB.COBOL(&FICHIER),DISP=SHR            
    //*                                                                 
    //* ************************************************************    
    //* * LINK IEWL 'OPTIONS=OPTS'                                 *    
    //* ************************************************************    
    //*                                                                 
    //LINK     EXEC PGM=IEWL,PARM='OPTIONS=OPTS'                        
    //OPTS DD *                                               
         AMODE=31,MAP                                         
         NORENT,DYNAM=DLL                                     
         CASE=MIXED                                           
    /*                                                        
    //*SYSLIB   DD   DSN=SYS1.COB2LIB,DISP=SHR                
    //*         DD   DSN=SYS1.COB2COMP,DISP=SHR               
    //SYSLIB   DD   DSN=IGY410.SIGYCOMP,DISP=SHR              
    //         DD   DSN=IGY410.SIGYPROC,DISP=SHR              
    //         DD   DSN=SYS1.LINKLIB,DISP=SHR                 
    //         DD   DSN=CEE.SCEELKED,DISP=SHR                 
    //SYSLMOD  DD   DSN=METAL.MALIB.OUT(&FICHIER),DISP=SHR    
    //SYSTERM  DD   SYSOUT=*                                  
    //SYSPRINT DD   SYSOUT=*                                  
    //SYSLIN   DD   DSN=METAL.MALIB.OBJ(&FICHIER),DISP=SHR
    J'ai cherché un peu quelques autres JCL exemples avec IGYCRCTL et les fameuses libs COB2LIB et COB2COMP...
    J'en ai déduit qu'il fallait absolument un SIGYCOMP et un SCEELKED !
    Dans le doute, j'en ai mis un peu plus pour le moment....
    Je ne pense pas que cela change quelque chose puisque "normalement" le linker ne crée de lien qu'entre symboles présents dans le code et des libs, pas plus ni moins.

    Bref, j'ai modifié mon JCL d'exécution comme cela :
    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
    //MYRUN    JOB CLASS=A,MSGLEVEL=(1,1),MSGCLASS=A,REGION=0M, 
    //         NOTIFY=&SYSUID,TIME=30                           
    //* SET FICHIER=HELLOC                                      
    //* SET FICHIER=TESTFD                                      
    //  SET FICHIER=CHICOU$Z                                    
    //RUNPRM   EXEC PGM=&FICHIER,                               
    //             PARM='METAL.TEST',                           
    //             REGION=0M                                    
    //STEPLIB  DD DSN=METAL.MALIB.OUT,DISP=SHR                  
    //*CONFIG   DD DSN=METAL.TEST,DISP=SHR                      
    //DEPENS   DD DSN=METAL.MALIB.DATA(DEP$JAN),DISP=SHR        
    //SORTIE   DD DSN=METAL.MALIB.DATA(TOTAL),DISP=SHR          
    //SYSPRINT DD SYSOUT=*                                      
    //SYSUDUMP DD SYSOUT=*                                      
    //SYSABEND DD SYSOUT=*     
    //SYSCPRTT DD SYSOUT=*
    Cependant, je n'ai aucun membre TOTAL PDS en sortie de créé...
    Et en SDSF st je vois :

    IGZ0026W The SORT-RETURN special register was never referenced, but the current content indicated the sort or merge operation in program DEPENSES on line number 62 was unsuccessful.
    METAL.MALIB.DATA(DEP$JAN) existe (PDS, RECFM=FB, LRECL=240), mais pas le membre TOTAL.
    Une idée du problème ?
    Je penche pour une carte DD liée au SD, mais je n'en suis pas sûr... SYSWORK n'est pas "automatiquement" géré par COBOL ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  16. #16
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    A l'exécution COBOL appelle le DFSORT, donc normalement il devrait y avoir de messages issus de DFSORT et notamment un message d'erreur ...

    Un DISPLAY du SORT-RETURN serait sans doute utile aussi ...

  17. #17
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Hmmm... en faisant mon 'st', puis un '?' je n'obtiens que cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SDSF JOB DATA SET DISPLAY - JOB MYRUN    (JOB00082)     DATA SET DISPLAYED     
    NP   DDNAME   StepName ProcStep DSID Owner    C Dest               Rec-Cnt Page
         JESMSGLG JES2                 2 METAL    A LOCAL                   17     
         JESJCL   JES2                 3 METAL    A LOCAL                   18     
         JESYSMSG JES2                 4 METAL    A LOCAL                   26     
         SYSOUT   RUNPRM             105 METAL    A LOCAL                    2
    En SYSOUT, on voit le message précédent.
    Aucun DFSORT j'ai l'impression... (ou alors je ne sais pas chercher, ce qui est plus que possible)

    Pour le DISPLAY du SORT-RETURN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           PROCEDURE DIVISION.                                             
           100-MAIN-MODULE.                                                
               SORT SORTED-DATA ON ASCENDING KEY NAME-ST OF SORTED-RECORD  
                    USING BUYER-DATA                                       
                OUTPUT PROCEDURE 200-AFTER-SORT                            
               STOP RUN.
    Devrais-je changer la ligne OUTPUT PROCEDURE 200-AFTER-SORT par un OUTPUT DISPLAY SORTED-RECORD ?
    (Ou alors est-ce une log spéciale que je ne connais pas)
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  18. #18
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour

    Pour un tri (interne ou externe), la carte SYSOUT est surement obligatoire dans le jcl, les messages peuvent s'afficher dans la partie JESMSGLG du rapport de job.


    par expérience, c'est une mauvaise idée de mettre le même fichier physique en entrée et en sortie, même si c'est 2 membres différents de pds.

  19. #19
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Oups....
    Comme j'ai vu une SYSIN se faire ajouter toute seule, je suis parti du principe que la SYSOUT c'était pareil...
    Mais apparemment non...
    Dès que je le peux je rajoute un //SYSOUT DD SYSOUT=* et je regarde les résultats
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  20. #20
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Alors, j'ai ajouté le SYSOUT comme mis avant...
    Cette fois, en effet, c'est un peu plus verbeux !
    Voici donc le JCL que j'ai utilisé :

    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
    //MYRUN    JOB CLASS=A,MSGLEVEL=(1,1),MSGCLASS=A,REGION=0M,            
    //         NOTIFY=&SYSUID,TIME=30                                      
    //* SET FICHIER=HELLOC                                                 
    //* SET FICHIER=TESTFD                                                 
    //  SET FICHIER=CHICOU$Z                                               
    //RUNPRM   EXEC PGM=&FICHIER,                                          
    //             PARM='METAL.TEST',                                      
    //             REGION=0M                                               
    //STEPLIB  DD DSN=METAL.MALIB.OUT,DISP=SHR                             
    //*CONFIG   DD DSN=METAL.TEST,DISP=SHR                                 
    //DEPENS   DD DSN=METAL.MALIB.DATA.IN(DEP$JAN),DISP=SHR                
    //SORTIE   DD DSN=METAL.MALIB.DATA.OUT(TOTAL),DISP=SHR                 
    //*SYSWORK  DD DSN=&&TEMP,DISP=(NEW,PASS,)                             
    //SYSPRINT DD SYSOUT=*                                                 
    //SYSUDUMP DD SYSOUT=*                                                 
    //SYSABEND DD SYSOUT=*     
    //SYSCPRTT DD SYSOUT=*     
    //SYSOUT   DD SYSOUT=*
    (J'ai essayé à tout hasard un DSN temporaire, mais sans succès, et en effet)

    Voici le message "évident" qui m'est retourné :

    08.21.04 JOB00089 $HASP165 MYRUN ENDED AT N1 - ABENDED S000 U4038 CN(INTERNAL)
    ***
    Dans SDSF, en st, avec un ?, j'obtiens cette fois 5 sorties :
    JESMSGLG, JESJCL, JESYSMSG, SYSOUT, CEEDUMP

    Je ne vais pas mettre le dump, on est d'accord, l'erreur ne doit pas être trop introuvable pour le moment !
    Surtout qu'en SYSOUT, cette fois, je peux lire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IGZ0201W A file attribute mismatch was detected. File BUYER-DATA in program DEPENSES had a record length of 35 and the file specified in the ASSIGN clause had a record length of 240.
    IGZ0035S There was an unsuccessful OPEN or CLOSE of file DEPENS in program DEPENSES at relative location X'05CC'.
             Neither FILE STATUS nor an ERROR declarative were specified. The status code was 39.
             From compile unit DEPENSES at entry point DEPENSES at compile unit offsset +000005CC at entry offset +000005CC at address 11A00964.
    Je suppose donc que mon dataset doit avoir "exactement" le format que COBOL s'attend à recevoir !
    Je vais donc rajouter des espaces dans la déclaration des FD pour matcher le 240 en entrée et en sortie !

    J'ai également séparé en 2 PDS : un d'entrée et un de sortie "au cas où" !

    EDIT :
    En voulant rajouter de l'espace, la compilation me dit cela :
    IGYGR1211-S A "RECORDING MODE" of "F" was specified for file "BUYER-DATA", but the calculated record size was variable. The file definition was discarded.
    Avec cette définition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           FD  BUYER-DATA                         
               RECORDING MODE IS F.               
           01  PEOPLE-RECORD.                     
               05 NAME-IN  PICTURE X(20).         
               05 MONEY-SPENT-IN  PICTURE 9999V99.
               05   PICTURE X(1).                 
               05 DATE-RECORD.                    
                  06 DAY-IN  PICTURE 99.          
                  06 MONTH-IN  PICTURE 99.        
                  06 YEAR-IN  PICTURE 9999.       
           01  BLANK-IN  PICTURE X(205).
    Je suis perdu... même si je lui dis qu'il y a 205 caractères après le record, il suppose que le format est variable ?
    Le SD n'est pas changé par contre... en fait rien n'a changé dans le code excepté l'ajout du BLANK-IN dans le FD entrée.
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/05/2011, 11h48
  2. Réponses: 0
    Dernier message: 02/05/2011, 16h25
  3. sorting Excel using POI
    Par wikisoft dans le forum Général Java
    Réponses: 0
    Dernier message: 10/05/2010, 15h29
  4. [MySQL] Use of undefined constant, MYSQL+sort
    Par stiveg dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/11/2008, 02h20
  5. Filename FTP SAS / zOS (MVS)
    Par Kenzo44 dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 08/09/2008, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo