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 :

[PC] Mon programme coince sur une ligne avec une date


Sujet :

Cobol

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut [PC] Mon programme coince sur une ligne avec une date
    Bonjour tout le monde,

    J'ai un programme qui coince

    Il doit lire les lignes d'un fichier txt et calculer la date de naissance de chacune des personnes :

    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
           IDENTIFICATION DIVISION.
           PROGRAM-ID. FICHIER-AGE.
           AUTHOR. JEAN.
           DATE-WRITTEN. 10/05/3008.
           DATE-COMPILED. 10/05/3008.
    
           ENVIRONMENT DIVISION.
           INPUT-OUTPUT SECTION.
           FILE-CONTROL.
    
               SELECT AGE ASSIGN "FICHIER-AGE.TXT"
                   ORGANIZATION IS LINE SEQUENTIAL
                   ACCESS MODE IS SEQUENTIAL.
    
           DATA DIVISION.
           FILE SECTION.
           FD AGE.
           01 PERSONNE.
               88 FIN-AGE VALUE HIGH-VALUES.
               02 NOM PIC X(10).
               02 PRENOM PIC X(10).
               02 DATE-N.
                   03 ANNEE PIC 9(4).
                   03 MOIS PIC 9(2).
                   03 JOUR PIC 9(2).
               02 COTE-COBOL PIC 9(3).
               02 COTE-ACCESS PIC 9(3).
    
           WORKING-STORAGE SECTION.
    
           77 DATE-AUJ PIC X(8).
           77 DATE-A PIC 9(4).
           77 DATE-B PIC 9(8).
           77 DATE-BBis PIC 9(4).
           77 AGE-USER PIC 9(2).
           PROCEDURE DIVISION.
    
               MOVE FUNCTION CURRENT-DATE TO DATE-AUJ.
               MOVE DATE-AUJ(1:4) TO DATE-A.
               OPEN INPUT AGE.
    
              PERFORM UNTIL FIN-AGE
    
              DISPLAY NOM " " PRENOM " " AGE-USER " " COTE-COBOL " "
              COTE-ACCESS
                 READ AGE
                     AT END SET FIN-AGE TO TRUE
                  END-READ
    
              MOVE DATE-N TO DATE-B
          *   MOVE DATE-B(5:8) TO DATE-BBis
              COMPUTE AGE-USER = ( DATE-A - DATE-B(5:8) )
    
    
              END-PERFORM
    
               CLOSE AGE.
    
    
    
    
               STOP RUN.
    J'ai en fait un problème sur cette ligne-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COMPUTE AGE-USER = ( DATE-A - DATE-B(5:8) )
    Voici le message d'erreur :

    34-S Operand DATE-B should be numeric
    Je cherche depuis pas mal de temps mais sans succès, auriez-vous une idée ?

    Merci d'avance pour votre aide.

    beegees

  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.

    En fait parce que la reference modifier DATE-B(5:8) est de type alpha même si le contenu est numérique.

    Tu extrais l'année à partir de DATE-N comme tu l'as fait pour DATE-A. D'ailleurs tu as commencé à le faire avec DATE-BBis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           77 DATE-B PIC 9(4).
               MOVE DATE-N(1:4) TO DATE-B.
               SUBTRACT DATE-B FROM DATE-A GIVING AGE-USER.
    Maintenant, tu peux utiliser les fonctions de calcul sur les dates. Je ne connais pas ton compilo, mais puisque tu as FUNCTION CURRET-DATE, je suppose que tu as les autres : ADD-DURATION, SUBTRACT-DURATION, etc...

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Bonjour.

    En fait parce que la reference modifier DATE-B(5:8) est de type alpha même si le contenu est numérique.

    Tu extrais l'année à partir de DATE-N comme tu l'as fait pour DATE-A. D'ailleurs tu as commencé à le faire avec DATE-BBis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           77 DATE-B PIC 9(4).
               MOVE DATE-N(1:4) TO DATE-B.
               SUBTRACT DATE-B FROM DATE-A GIVING AGE-USER.
    Maintenant, tu peux utiliser les fonctions de calcul sur les dates. Je ne connais pas ton compilo, mais puisque tu as FUNCTION CURRET-DATE, je suppose que tu as les autres : ADD-DURATION, SUBTRACT-DURATION, etc...
    Bonjour,

    Un tout grand merci pour ta réponse.

    Je vais analyser cette réponse et je reviendrai.

    Encore un tout grand merci.

    beegees

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Et en plus, tu dois coder :
    et non :
    pour avoir les positions 5 à 8, car le 2ème argument de la modification de référence est une longueur et pas une position.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Réponses: 6
    Dernier message: 30/08/2007, 16h47

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