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 :

Conversion d'une date en texte et chiffre


Sujet :

Cobol

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Conversion d'une date en texte et chiffre
    Bonjour,

    Je récupère une date dans ma base de données DB2.

    Je veux ensuite manipuler les chiffres à l'intérieur de cette date (le jour, le mois, l'année) pour faire des soustractions et multiplications.

    Bref, j'ai déclaré une variable comme suit, mais ça ne compile pas lors d'un calcul (ex. SUBTRACT 1 FROM WS-TEMP-DD)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       
         01  WS-DAT-TEMP.
               05  WS-TEMP-MM                    PIC  X(02).
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-DD                    PIC  X(02).                    
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-YR                    PIC  X(04).
    J'ai essayé avec des PIC 9 pour chacun, mais ça ne compile pas au niveau du Select pour récupérer la date dans la BD.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
         01  WS-DAT-TEMP.
               05  WS-TEMP-MM                    PIC  9(02).
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-DD                    PIC  9(02).                    
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-YR                    PIC  9(04).
    J'ai également essayé de reféfinir ma structure. Mais, soit je ne l'ai pas fait de la bonne manière, soit ce n'est pas permis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
           
           01  WS-DAT-TEMP-NUM REDEFINES WS-DAT-TEMP.
               05  WS-TEMP-MM-NUM                PIC  9(02).
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-DD-NUM                PIC  9(02).                   
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-YR-NUM                PIC  9(02).
    Finalement, en essayant de redéfinir à l'intérieur de la structure date, ça ne compile pas non plus au niveau du Select.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
           
           01  WS-DAT-TEMP.
               05  WS-TEMP-MM                    PIC  X(02).
               05  WS-TEMP-MM-NUM                PIC  9(02) 
                      REDEFINES WS-TEMP-MM.
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-DD                    PIC  X(02).
               05  WS-TEMP-DD-NUM                PIC  9(02)             
                      REDEFINES WS-TEMP-DD.           
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-YR                    PIC  X(04).
               05  WS-TEMP-YR-NUM                PIC  9(04)             
                      REDEFINES WS-TEMP-YR.
    Avez-vous une idée comment je peux faire ?

    Merci et bonne journée

  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.

    Si tu veux faire des opérations arithmétiques sur les dates tu peux utiliser les fonctions ADD-DURATION, SUBTRACT-DURATION et FIND-DURATION si tu les as dans ton compilo. Il y a toute une batterie de fonctions et d'API qui peuvent t'aider. Regarde les discussions post-it plus haut :

    - http://www.developpez.net/forums/d64...obol-for-z-os/

    - http://www.developpez.net/forums/d61...ues-ile-cobol/

    Cependant en restant sur ton exemple, je pense qu'il faudrait redéfinir toute la structure comme tu l'as fait mais en supprimant les VALUE dans le REDEFINES (ce n'est pas autorisé). Même les VALUE dans l'objet du REDEFINES ne doivent pas tellement servir, je pense qu'ils doivent être écrasés par les séparateurs de la variable type DATE au moment du transfert.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    01  WS-DAT-TEMP.
               05  WS-TEMP-MM                    PIC  X(02).
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-DD                    PIC  X(02).                    
               05  FILLER                        PIC  X(01)   VALUE '/'.
               05  WS-TEMP-YR                    PIC  X(04).
    01  WS-DAT-TEMP-NUM REDEFINES WS-DAT-TEMP.
               05  WS-TEMP-MM-NUM                PIC  9(02).
               05  FILLER                        PIC  X(01).
               05  WS-TEMP-DD-NUM                PIC  9(02).                   
               05  FILLER                        PIC  X(01).
               05  WS-TEMP-YR-NUM                PIC  9(02).

  3. #3
    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 Zandes Voir le message
    ... Je récupère une date dans ma base de données DB2.
    1) quel DB2 ?

    2) comment est déclaré la colonne DATE dans la table ?

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Cobol

    * Micro Focus SQL External Compiler Module for IBM DB2 UDB
    * Version 4.0.05 (C) copyright 1997-2008 Micro Focus (IP) Ltd.

    DB2

    DB2 v9.5

    -------------------

    Sinon ça a l'air de fonctionner en enlevant le "value" du redefine. Je peux effectivement faire mes calculs avec les valeurs "redéfinies" comme numérique.

    Avant de marquer la discussion comme résolue...

    Là, j'essaie de soustraire deux dates ensemble et j'ai une erreur de compile : "Invalid FUNCTION name FIND-DURATION"

    Le traitement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    COMPUTE WS-NB-JOURS-DELAI-TRAIT = 
                     FUNCTION FIND-DURATION (WS-DAT-DISTR-TRANSF-FONDS 
                        WS-DAT-DER-JOUR-RECEP-DECL DAYS)
    Et la déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    01  WS-WORK-ITEMS.
          05  WS-NB-JOURS-DELAI-TRAIT PIC S9(08) COMP-5 VALUE 0.
    
    01  WS-DAT-DISTR-TRANSF-FONDS         PIC  X(10).
    01  WS-DAT-DER-JOUR-RECEP-DECL         PIC  X(10).
    Est-ce que ma version de Cobol accepte la fonction FIND-DURATION ? Ou est-ce que je l'ai mal utilisé ?

    si tu les as dans ton compilo
    Comment je sais si je les ai ou non dans mon compilateur ?

    Merci

  5. #5
    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.

    Je ne connais pas tes compilateurs, mais tu ne peux pas utiliser les fonctions intrinsèques des dates sur des données qui ne sont pas de type date. Il faut les convertir, exemple sur ILE Cobol for Iseries :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0047.00            compute nbj = function find-duration              
    0048.00                (function convert-date-time(wdate0 date)      
    0049.00                 function convert-date-time(wdate1 date) days)
    Pour ce qui est de savoir si une fonction, une instruction ou tout autre élément existe dans le compilateur, il n'y a que sa doc d'origine qui pourrait le dire.

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Après avoir vérifier (avoir trouvé ma version et la doc surtout) dans la doc, j'ai vu que cette fonction n'est pas présente pour MF Server Express V5.1.

    Je vais donc utiliser les fonctions NUMVAL, INTEGER-OF-DATE et DATE-OF-INTEGER.

    Pour info, le typage en "date" n'est pas non plus admis.

    Je vais faire quelques tests et je vous revient avec la solution concrète.

  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
    Citation Envoyé par Zandes Voir le message
    ... Je vais donc utiliser les fonctions NUMVAL, INTEGER-OF-DATE et DATE-OF-INTEGER.
    C'est ce que je ferais en COBOL z/OS ...

    1) INTEGER-OF-DATE convertit en entier une date
    2) opération arithmétique sur les entiers ainsi convertis
    3) DATE-OF-INTERGER convertit en date un entier

    Par contre, je ne pense pas que tu aies besoin de NUMVAL.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 951
    Points : 2 066
    Points
    2 066
    Par défaut
    Bonjour

    As-tu essayer de faire faire le travail par SQL?

    Pour un calcul de date, c'est plus simple que de coder soit même. Il existe pas mal de fonctions intégrées permettant divers calcul.

    Pour des transformations de CHAR en NUM, tu laisses de coté les particularité de ton cobol.

Discussions similaires

  1. [AC-2010] Problème de conversion d'une chaine de texte en format date.
    Par Axe_Débutant dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/01/2015, 03h29
  2. conversion d'une date en chaine de caracteres
    Par salmer dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/10/2006, 16h31
  3. [C#] Conversion d'une date
    Par Jos dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/02/2006, 16h50
  4. Conversion d'une date jj/mm/aaaa en N°sem
    Par GD67 dans le forum Access
    Réponses: 2
    Dernier message: 16/11/2005, 09h02
  5. [date] conversion d'une date et compatibilité access
    Par WriteLN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/01/2005, 14h03

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