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 :

Fonction STRING + suppression des zeros


Sujet :

Cobol

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut Fonction STRING + suppression des zeros
    Bonjour,

    Voilà je travaille sur une édition ou je dois ressortir une liste d'identifiant composé sur une seule ligne. Pour que cela passe sur une seule ligne, je dois d'abord supprimer tous les zéros. Au lieu de faire une boucle sur les caractères de ma zone (valeur alphanumérique) et supprimer les zéro par des blanc, je souhiate supprimer complètement ces zéros. Au final au lieu d'avoir : 0000000018, j'obtienne 18 (sans blanc devant).
    Après quelques recherches et des conseils, on m'avait fourni la solution suivante :
    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
    STRING
                VAR1
                DELIMITED BY SPACES
     
                SPACE-DELIMITER
                DELIMITED BY SIZE
     
                VAR2
                DELIMITED BY SPACES
     
                SPACE-DELIMITER
                DELIMITED BY SIZE
     
                VAR3
                DELIMITED BY SPACES
     
               INTO VAR4
               END-STRING.
    Avec cette solution, j'arrive à concaténer mes valeurs en une seule variable, mais je n'arrive pas à supprimer les zéros ....

    Est-ce que l'un d'entre vous aurait une solution ?

    D'avance merci.

  2. #2
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    Si on est certain que la zone est numérique, bien entendu les masques d'édition (pic z(n)9(1) par exemple)
    Sinon Inspect VARn Replacing leading zero by space pour ne pas supprimer les zéros significatifs avant d'exécuter le string.

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    la zone d'édition est une zone alphanumérique qui prend toute la largeur de la plage, et je doi concaténer mes valeurs dans cette zone ..
    mes données sont des alphanumériques, donc pour toi la solution serait de faire le "INSPECT VARn REPLACING ...." et après le STRING ..
    Ainsi, ma première étape remplacerait les blanc par les zéros et ensuite, les blanc seraient supprimés par la fonction STRING ?
    Merci

  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
    Bonjour.

    Tu peux utiliser la fonction TRIM si elle existe dans ton Cobol, mais tu dois passer par ce que te dit Homer-ac pour que les zéros significatifs ne soient pas supprimés.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    mais je n'ai pas la fonction TRIM ...

  6. #6
    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
    Bonjour,

    A mon avis, la solution la plus simple est la suivante (pour chaque nombre) :
    1) compter le nombre de zéro (leading) de chaque nombre par INSPECT TALLYING ;
    2) récupérer les chiffres significatifs (en pensant à traiter le cas 0) ;
    3) ajouter le résultat obtenu à la chaîne de sortie par STRING.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    je pensais à une solution du genre :

    1) pour chaque valeur, je fais une boucle dessus afin de supprimer les zéros à gauche
    2) je place ma valeur dans une variable
    3) avec la fonction STRING, je concatène toutes mes variables

    Le problème, c'est que tant ce cas, il me faut des variables avec des tailles "dynamiques" ....

  8. #8
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    ? ou est le pb ?
    Inspect VARn Replacing leading zero by space de chaque zone avant la reprise de celles-ci par un string va faire ce qu'il faut non ?

  9. #9
    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
    Citation Envoyé par vince29 Voir le message
    Le problème, c'est que tant ce cas, il me faut des variables avec des tailles "dynamiques" ....
    Les deux solutions sont équivalentes, mais pas besoin de taille dynamique.

    Regarde :

    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
     
    01 WS-MT-X.
       05 WS-MT-9                   PIC 9(18).
       05 FILLER REDEFINES WS-MT-9.
          10 WS-MT-TAB  OCCURS 18 PIC X.
    01 WS-DEB                       PIC S9(04) COMP.
    01 WS-LG                        PIC S9(04) COMP.
    01 WS-POS                       PIC S9(04) COMP.
    
      MOVE 0            TO WS-POS
    Pour chaque variable :
      MOVE MT           TO WS-MT-9
      PERFORM MEF-MT
      STRING ZONE-RECEPTRICE(1:WS-POS)
             WS-MT-X (WS-DEB:WS-LG)
             "/"
        DELIMITED BY SIZE
        INTO ZONE-RECEPTRICE
      ADD WS-DEB +1     TO WS-POS
    ...
    
    MEF-MT.
      IF WS-MT = 0
         MOVE 18             TO WS-DEB
         MOVE 1              TO WS-LG
      ELSE
         PERFORM VARYING WS-DEB
             FROM 1 BY 1
           UNTIL (WS-MT-TAB (WS-DEB) NOT = 0)
            CONTINUE
         END-PERFORM
         COMPUTE WS-LG = 19 - WS-DEB
      END-IF

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    Voilà le code que j'ai mis en place :
    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
    MOVE "000000000000000018"  TO W-VAR01.          
    INSPECT W-VAR01 REPLACING LEADING ZERO BY SPACE.
    MOVE "000000000000000223"  TO W-VAR02.          
    INSPECT W-VAR02 REPLACING LEADING ZERO BY SPACE.
    MOVE "000000000000010018"  TO W-VAR03.          
    INSPECT W-VAR03 REPLACING LEADING ZERO BY SPACE.
    MOVE "000000000000000045"  TO W-VAR04.          
    INSPECT W-VAR04 REPLACING LEADING ZERO BY SPACE.
    
    STRING                
     W-VAR01              
     DELIMITED BY SPACES  
                          
     W-LIMIT              
     DELIMITED BY SIZE    
                          
     W-VAR02              
     DELIMITED BY SPACES  
                          
     W-LIMIT              
     DELIMITED BY SIZE    
                          
     W-VAR03              
     DELIMITED BY SPACES  
                              
     W-LIMIT              
     DELIMITED BY SIZE    
                              
     W-VAR04              
     DELIMITED BY SPACES  
    
    INTO W-VAR21 
    END-STRING.
    Résultat : W-VAR21 = ''
    L'un d'entre vous aurait une explication par hasard ?
    Merci.

  11. #11
    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
    Re,
    L'instruction STRING ne supprime pas les espaces. La solution de Fremen167 me parait excellente à première vue. Pourquoi chercher plus loin ?
    Et au fait quelle est la signification de ces nombres, y a t-il un point décimal à faire sortir, y a t-il du texte à insérer entre eux ?

  12. #12
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    ok je vais tenter avec sa solution, mais le COBOL n'est franchement pas très pratique sur ce genre de choses .....

  13. #13
    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
    Oui, il était très limité en matière de traitement des chaines de caractères, mais il a évolué avec les nouvelles versions du type ILE sur les iSeries, et les autres que je ne connais plus, genre MF

  14. #14
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    et malheureusement pour moi, je suis sur iseries mais pas avec le compilateur ILE ....

  15. #15
    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
    Excuse moi, mais là je ne te comprends pas. En principe il doit être là ton compilateur. Quelle version d'OS stp ?

  16. #16
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    là j'avoue que je ne sais pas comment faire pour savoir sur quelle version de l'OS je suis.
    Je suis sur AS400 depuis quelques mois seulement ....

  17. #17
    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
    Tu le trouves sur la première ligne de ton listing de compilation déjà.
    Puis si tu as accès aux commandes de l'AS400, fais : GO LICPGM et affiche les logiciels sous licence (fais gaffe à ne pas faire autre chose), (F11 pour voir la version) et tu vas voir tous les logiciels installés y compris s'il y a le compilateur ILE COBOL

  18. #18
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    ok merci pour l'info c'est toujours on à savoir.
    Il s'agit donc de la version "V5R3M0"

  19. #19
    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
    addendum : si tu utilises la fonction du genre WS-MT-X (WS-DEB:WS-LG) (post de Fremen167), tu es obligé d'être en ILE, je ne me rappelle pas si ça existe en Cobol/400 OPM, et du coup tu peux utiliser les fonctions TRIM, TRIMR et TRIML

  20. #20
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    les fonctions TRIM, RTRIM ou LTRIM existe sous COBOL ?
    je n'ai pas trouvé de bons tutoriaux sur le COBOL et je suis un peu perdu avec ces versions de compilateur
    tu as un exemple ?

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

Discussions similaires

  1. [AC-2003] Remplacer les chaines vides (ZLS – Zero Lenght String) par des Null.
    Par Bonero dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/03/2012, 17h34
  2. suppression des zero dans une date
    Par bambino13 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/07/2009, 17h27
  3. Remplacer des caractères avec la fonction string.replace
    Par chtom dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/12/2008, 16h43
  4. Fonction "contains" pour des String
    Par Gaaaga dans le forum Flex
    Réponses: 1
    Dernier message: 27/05/2008, 14h16
  5. Réponses: 2
    Dernier message: 09/03/2006, 14h15

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