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 :

Cadrer une chaîne de caractère à droite


Sujet :

Cobol

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Cadrer une chaîne de caractère à droite
    Bonjour,

    Je suis débutant en COBOL et je fais fasse à une problématique que je ne peux résoudre.

    J'ai une variable d'entrée qui s'appelle COMMANDE déclaré en alpha PIC X(20).
    Cette donnée est valorisée comme suit :

    "12456987############" ou bien "#######8456327895421"

    ou le caractère # correspond à un SPACE.

    Le contenu de cette donnée doit alimentée la donnée en sortie NUM-CMDE déclaré en PIC X(20) mais le contenu doit être cadré à droite et complété par des zéro à gauche.

    Pourriez-vous m'indiquer le code à écrire en COBOL pour cette mise en oeuvre ?

    En vous remerciant par avance.

  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 as la fonction NUMVAL dans ton langage et si la longueur d'un numérique est autorisée à 20 digits, c'est facilement faisable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          05 COMMANDE PIC X(20).
      .../...
        03 NUM-CMDE PIC X(20).
        03 NUM-CMDE9 REDEFINES NUM-CMDE PIC 9(20).
      .../...
       MOVE FUNCTION NUMVAL(COMMANDE) TO NUM-CMDE9. 
    *  ou si cette forme d'utilisation est invalide 
       COMPUTE  NUM-CMDE9 = FUNCTION NUMVAL(COMMANDE).
    Sinon il y a d'autres solutions, mais on en reparlera.
    Donne nous la version de ton compilateur et ton OS.
    Décidément, il y a un problème de mise en forme sous FF.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    La solution ne fonctionne pas. Je suis limité à 18 digit et la fonction NUMVAL ne passe pas.

    Merci pour votre aide pour une atre solution.

  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
    ok,
    Je t'ai fait un exemple avec NUMVAL et deux autres méthodes, la méthode METHODE-BOUCLE1 est la plus basique et ne demande pas de fonctionnalités avancées.
    Chez toi, la fonction NUMVAL n'existe pas ou n'a pas pu être utilisée ?
    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
    000010$SET VSC2 OSVS COMP
    000020 Identification Division.
    000030 Program-Id. NUMVALA-CBL.
    000040***************************************************************
    000050*                                                             *
    000060*     Test Saisie d'un Numérique en format libre avec         *
    000070*     - NUMVAL                                                *
    000070*     - Boucle                                                *
    000070*                                                             *
    000070*                                                             *
    000080***************************************************************
    000090*
    000100 Author. H.JAIDANE.
    000110 Environment Division.
    000120 Configuration Section.
    000130 Source-Computer. IBM-PS2.
    000140 Object-Computer. IBM-PS2.
    000150 Special-Names.
    000160     Decimal-point is comma.
    000180 Input-Output Section.
    000190 File-Control.
    000350*
    000360 Data Division.
    000370 File Section.
    000520*
    000530 Working-Storage Section.
    000000 77   X pic x.
    000000 77   I pic 9(4) comp.     
    000000 77   J pic 9(4) comp.     
    000000 01   XMONTANT pic x(18).
    000000 01   WMONTANT pic 9(18). 
    000000 01   WFIN     pic x.
    000000      88 FIN-TRAIT value "1".     
    000000*    
    000000 01   B1-XMONTANT.
    000000      03 B1-XMONT occurs 18 pic x.     
    000000 01   B1-YMONTANT.
    000000      03 B1-YMONT occurs 18 pic x.     
    000000*    
    000000 01   B2-XMONTANT pic x(18).
    000000 01   B2-YMONTANT pic x(18).
    005600*
    005610 Procedure Division.
    000000 TRAIT.
    000000     move 0 to WFIN.
    000000     perform SAISIE until FIN-TRAIT.
    000000     stop run.
    008360 SAISIE.
    000000     display " "
    000000     display "Donner Montant : "
    000000     accept XMONTANT
    000000     if XMONTANT = spaces or low-value move 1 to WFIN
    000000     ELSE perform METHODE-NUMVAL
    000000          perform METHODE-BOUCLE1
    000000          perform METHODE-BOUCLE2
    000000     end-if.
    000000 METHODE-NUMVAL.
    000000*          move FUNCTION NUMVAL(XMONTANT) to WMONTANT
    000000*ou
    000000*          compute WMONTANT = FUNCTION NUMVAL(XMONTANT)
    000000*
    000000          display " "
    000000          display "NUMVAL - Montant Saisie     = " XMONTANT
    000000          display "NUMVAL - Montant Numérique  = " WMONTANT.
    000000 METHODE-BOUCLE1.
    000000     move XMONTANT to B1-XMONTANT
    000000     move zeros to B1-YMONTANT 
    000000          move 18 to J add 1 to J
    000000          perform varying I from 18 by -1 
    000000                            until I = 0
    000000                  move B1-XMONT(I) to X
    000000                  if X numeric  
    000000                     subtract 1 from J
    000000                     move B1-XMONT(I) to B1-YMONT(J)
    000000          end-perform
    000000          move B1-YMONTANT to WMONTANT
    000000          display " "
    000000          display "BOUCLE1 - Montant Saisie     = " XMONTANT
    000000          display "BOUCLE1 - Montant Transformé = " B1-YMONTANT
    000000          display "BOUCLE1 - Montant Numérique  = " WMONTANT.
    000000 METHODE-BOUCLE2.
    000000      move XMONTANT to B2-XMONTANT
    000000      move zeros to B2-YMONTANT 
    000000          move length of B2-YMONTANT to J add 1 to J
    000000          perform varying I from length of B2-XMONTANT by -1 
    000000                            until I = 0
    000000                  move B2-XMONTANT(I:1) to X
    000000                  if X numeric  
    000000                     subtract 1 from J
    000000                     move B2-XMONTANT(I:1) to B2-YMONTANT(J:1)
    000000          end-perform
    000000          move B2-YMONTANT to WMONTANT
    000000          display " "
    000000          display "BOUCLE2 - Montant Saisie     = " XMONTANT
    000000          display "BOUCLE2 - Montant Transformé = " B2-YMONTANT
    000000          display "BOUCLE2 - Montant Numérique  = " WMONTANT.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    OK merci, j'ai testé la METHODE-BOUCLE1 qui fonctionne.
    Encore merci pour la solution.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 40
    Points
    40
    Par défaut Cadrer ....
    Si tu me donnes ton adresse courriel, je t'envoie uns série de sous-routines assuarant quelques fonctions de type "string".
    Cela ne sert à rien à devoir réinventer la roue chaque fois que quelqu'un commence en Cobol !

    Je dispose d'un "vieux" Cobol (standard 85, eh oui !) , donc tout à fait classique. Ces routines peuvent fonctionner avec n'importe quel Cobol;

    Petite remarque concerant les demandes "en général": il serait bien que chaque demande fournisse aussi l'environnement dans lequel le demandeur travaille (Windows, Unix, le Cobol, etc)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 02h08
  2. [MySQL] Découper une chaîne de caractères par la droite
    Par Hboss dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/10/2011, 17h49
  3. Compléter une chaîne de caractères à droite
    Par muchmorehuman dans le forum Excel
    Réponses: 2
    Dernier message: 15/09/2009, 19h41
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 12h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 02h39

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