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 :

Mettre un décimal dans un alphanumérique en gardant la virgule


Sujet :

Cobol

  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut Mettre un décimal dans un alphanumérique en gardant la virgule
    Bonjour,
    Je cherche à mettre un champ (champ1) déclaré comme ceci : dans un champ (champ2) alphanumérique en gardant la virgule.
    Par exemple :
    si champ1 = 12,45
    alors je veux après le avoir champ2 = 12,45
    Car là je vois que la virgule saute automatiquement lors du MOVE !
    Faut-il une déclaration spéciale pour les champ1 et champ2 ?
    Merci d'avance
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  2. #2
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Bon je pense avoir trouver la réponse par ici.
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Et quelle option as-tu retenue alors ?

    Si "CHAMP1" est déclaré en COMPUTATIONAL-qqch ou BINARY, aucune option proposée fonctionnera correctement.

    Sous quel OS tournes-tu ?

    Edit :

    J'aurais écrit tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          Special-Names.   Decimal-Point is Comma. 
    
     01  Champ1            pic 9(02)V99 VALUE 12,34.          
     01  Champ2            pic Z(2),99.           
     
            Move Champ1 to Champ2.
    Dans Champ2, tu auras la valeur 12,34 éditée avec la virgule et suppression des éventuels zéros de gauche non significatifs.

    La picture d'édition fait le travail que tu veux.

  4. #4
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    J'ai opté pour une déclaration de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    11 W-MTREGLD2       PIC 9(13)V99.
    11 W-MTREGLR2  REDEFINES W-MTREGLD2.
        12 W-MTREGL-ENT2 PIC 9(13).
        12 W-MTREGL-DEC2 PIC 99.
    11 W-MTREGLF2       PIC X(20).
    
    
    *** Après je concatène W-MTREGL-ENT2 et W-MTREGL-ENT2
    STRING W-MTREGL-ENT2   DELIMITED BY SIZE
                      ","             DELIMITED BY SIZE
                      W-MTREGL-DEC2   DELIMITED BY SIZE
                      INTO W-MTREGLF2
    J'ai eu un problème lorsque W-MTREGLD2 < 0. Je ne comprends pas pourquoi dans ce cas j'ai W-MTREGL-ENT2 > 0 et W-MTREGL-DEC2 <0 !! (le signe moins est affecté à la partie décimale et non pas à la partie entière !). Sans trop réfléchir j'ai multiplié la partie décimale par (-1) !
    Le tour est joué
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Mais pourquoi pas la picture d'édition que j'ai proposée car cela me semble quand même plus simple et résoud le problème du signe ?

  6. #6
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Est ce qu'avec cette picture d'édition la valeur contenue dans champ2 sera insérée avec la virgule et le signe dans la base DB2 ?
    Car lorsque j'alimente champ2 je le mets dans un champ d'un fichier et je WRITE.

    Citation Envoyé par Mercure Voir le message
    Mais pourquoi pas la picture d'édition que j'ai proposée car cela me semble quand même plus simple et résoud le problème du signe ?
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par JauB
    Est ce qu'avec cette picture d'édition la valeur contenue dans champ2 sera insérée avec la virgule et le signe dans la base DB2 ?
    Non. Tu dois insérer CHAMP1 dans la base, mais chaque fois que tu auras besoin d'éditer ou d'imprimer la virgule, un MOVE CHAMP1 de la base TO CHAMP2 fera l'affaire.
    Il faut toutefois que la picture de Champ1 soit signée et celle de Champ2 aussi


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          01  Champ1            pic S9(02)V99.        
    
          01  Champ2            pic -Z(2),99.      
       
       ou bien
    
          01  Champ2            pic Z(2),99-.   
    
    selon que tu veux voir le signe à gauche ou à droite de la zone.

  8. #8
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Non. Tu dois insérer CHAMP1 dans la base
    Beh c'est ça le problème ! mon champ est déclaré dans la base comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     A            MTREGL        16A         TEXT('Montant réglé')
    Dans ce cas, si je fais :
    MOVE champ1 TO MTREGL OF MYFILE alors ça va pas marcher !
    D'où la nécessité de passer par une variable intermédiaire qui contient la virgule comme caractère ....
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Mais pourquoi le montant est-il défini en alphanumérique dans la base ? Cela me semble incohérent.

  10. #10
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    En fait tous les champs de mon fichier sont en alphanumérique. Pourquoi ? parce que ce fichier est destiné à un export Excel (j'avais posté pour savoir s'il y a possibilité d'export Excel avec extraction automatique des noms de colonnes) ! Puisque c'est pas impossible de le faire d'une manière aisée sans passer par d'autres outils... j'étais obligé de redclarer tous mes champs en alpha comme lors de l'écriture j'initialise mon fichier par un entête en dur en y écrivant les noms des colonnes. L'export vers Excel devient plus lisible à l'utilisateur final !
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    A propos d'excel, je t'ai répondu en te donnant une solution simple ici et ce n'est pas ce que tu as fait. Tu n'as pas besoin de définir tous tes champs en alpha comme tu l'as fait et la soluce que je t'ai proposée et beaucoup plus simple et vraiment standard.

  12. #12
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Oui j'ai vu ta solution sur l'Excel et je pense que c'est la bonne façon de faire. Mais, compte tenu d'un certain type d'utilisateur, faire une manipulation sous Excel implique le rejet du projet. L'utilisateur a exprimé qu'il veut accéder directement aux différents fichiers Excel exportés sans aucune manipulation. C'est pour ça qu'on a pensé à un export sur l'IFS de l'AS400 ...
    En tut cas merci pour ces réflexions si riches


    Citation Envoyé par Mercure Voir le message
    A propos d'excel, je t'ai répondu en te donnant une solution simple ici et ce n'est pas ce que tu as fait. Tu n'as pas besoin de définir tous tes champs en alpha comme tu l'as fait et la soluce que je t'ai proposée et beaucoup plus simple et vraiment standard.
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Je ne ferai pas de commentaire désobligeant mais pourtant il y aurait de quoi !

    Edit :
    Citation Envoyé par JauB
    J'ai eu un problème lorsque W-MTREGLD2 < 0. Je ne comprends pas pourquoi dans ce cas j'ai W-MTREGL-ENT2 > 0 et W-MTREGL-DEC2 <0 !! (le signe moins est affecté à la partie décimale et non pas à la partie entière !). Sans trop réfléchir j'ai multiplié la partie décimale par (-1) !
    Le tour est joué
    Je n'avais pas bien lu ce que tu faisais ici et c'est parce que tu vas au devant de gros ennuis que j'y reviens.

    C'est normal que le signe se trouve à droite de la partie décimale car c'est le standard que le compilateur Cobol prend par défaut. Par exemple, si la valeur 12345,67 est négative, le signe sera par défaut placé à droite de la valeur : 12345,67-. Si tu veux placer le signe à gauche de la valeur, ajoute SIGN IS LEADING et SIGNE LA PICTURE dans la définition de la zone concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    11 W-MTREGLD2       PIC S9(13)V99 SIGN IS LEADING.
    11 W-MTREGLR2  REDEFINES W-MTREGLD2.
        12 W-MTREGL-ENT2 PIC S9(13).
        12 W-MTREGL-DEC2 PIC 99.
    11 W-MTREGLF2       PIC X(20).
    Multiplier le montant par -1 pour faire "disparaître" le signe, c'est renvoyer un résultat algébriquement erroné. Es-tu sûr que c'est bien ce que tu veux ? Il s'agit je crois de montants de réglements. Si tu en changes le signe (le sens), tu vas avoir de très mauvaises surprises, c'est garanti ! Les utilisateurs vont te tomber sur le dos, surtout les comptables !

    Je te propose donc de corriger ton programme et de faire tout simplement ce qui suit pour avoir le signe moins en première position dans la zone W-MTREGLF2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Move Spaces to W-MTREGLF2.             
                                           
    String W-MTREGL-ENT2 Delimited By Size,
           "," Delimited By Size,          
           W-MTREGL-DEC2 Delimited By Size 
    Into W-MTREGLF2.
    Comme la zone de travail d'origine (W-MTREGLD2) est définie an ayant le signe à gauche du montant, la conversion en alphanumérique avec le signe à gauche ne nécessite aucun artifice de programmation particulier et c'est tout simple. C'est ce que je montre ci-dessus.

  14. #14
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 056
    Points
    32 056
    Par défaut
    Surtout qu'avec la macro qui va bien, c'est "j'ouvre l'EXCEL standard, je clique sur le bouton, et hop ça m'a généré un EXCEL rempli". Que les manips à la noix consistant à choisir un format pour chaque case soient jugées trop lourdes pour madame Michu, je veux bien. Mais on peut générer dynamiquement un tableau EXCEL à partir d'une interface EXCEL, qui permette de choisir un fichier d'origine.....Bon, évidemment, ça prend quelques jours à faire.

    M'enfin, le client est roi, et c'est lui qui décide. Parfois à son détriment(parceque du tout alpha, ça va finir par lui exploser à la tronche).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Février 2011
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    ceci ne serait-il pas plus simple ?

    définir une variable intermédiaire : aux pic 99V,99.

    move champ1 to aux. -> édition.
    move aux to champ2. -> désédition

    et le tour est joué.

    bernard.hazard@gmail.com

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/02/2004, 15h20
  2. [Drag & Drop] Mettre une fiche dans un panel
    Par corwin_d_ambre dans le forum Composants VCL
    Réponses: 5
    Dernier message: 12/01/2004, 11h46
  3. Mettre son programme dans Envoyer Vers ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 11
    Dernier message: 29/07/2003, 20h09
  4. Peut on mettre une image dans une BD MySQL ?
    Par maddog2032 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/07/2003, 17h18
  5. Réponses: 1
    Dernier message: 06/03/2003, 12h57

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