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 :

supprimer des séparateurs et mettre au format fixe


Sujet :

Cobol

  1. #1
    Invité
    Invité(e)
    Par défaut supprimer des séparateurs et mettre au format fixe
    Je suis confronté à un problème que voici :
    j'ai un fichier en entrée qui fait 13000 octets de long et qui contient 400 données.
    Les données de longueur variable sont séparées par des séparateurs point virgule ';'

    Je dois créer un programme qui doit supprimer les séparateurs et mettre les données au format fixe.
    En sortie du programme j'aurai donc un fichier sans séparateur et avec les données au format fixe.

    Pouvez-vous, svp, m'aider pour la mise en oeuvre de ce traitement ?

  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.

    Est ce que tu peux nous préciser :
    - la plateforme et le compilateur
    - et est ce que les zones en sortie sont identiques en type et longueur pour qu'on puisse utiliser, par exemple, un tableau ?

    Pense au UNSTRING.

    Si ce n'est pas obligatoire de faire ça en Cobol, les outils des plateformes sont capables de le faire.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je ne connais pas la version du compilateur (c'est du IBM Z/OS).
    Et il s'agit d'un pgm COBOL à développer.

    Voici le type de description en sortie :
    une COPY avec 400 données ; la longueur totale de la COPY fait 13000 octets.
    Ce ne sont que des données de format alphanumérique avec des longueurs différentes.

    exemple :
    NOM PIC X(20)
    PRENOM PIC X(20)
    VILLE PIC X(32)
    PAYS PIC X(10)

    etc

    le fichier en entrée est de cette forme (données au format variable)

    DURAND;EMILIE;PARIS;FRANCE

    En sortie du programme, voici ce que cela doit donner :
    DURAND (suivi de 14 SPACE) EMILIE (suivi de 14 SPACE) PARIS (suivi de 27 SPACE) FRANCE (suivi de 4 SPACE)


    Je ne maitrise pas les tableaux et UNSTRING.

    Quelles sont les instructions à coder ?

  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.

    Ok, je ne suis pas sur du z/OS mais pas trop loin, ça devrait marcher.

    Dans ton cas c'est simple mais fastidieux, tu vas devoir pisser les 400 lignes des zones en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
               unstring LIGNE-ENTREE             
                  delimited by ";"         
                  into                     
                       NOM                 
                       PRENOM              
                       VILLE               
                       PAYS                
               end-unstring.

  5. #5
    Invité
    Invité(e)
    Par défaut
    merci l'instruction unstring fonctionne.

    Autre question : j'ai un champ MONTANT en PIC X (23).

    Après le UNSTRING, voici un exemple de contenu de ce champ :
    456.23
    autre exemple : 85647.58

    Je souhaite que ces valeurs soient mise dans une zone en numérique avec suppression du point (qui matérialise la virgule).
    Cette zone serait en PIC 9(16)V9(2).

    Comment procéder ?

  6. #6
    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.
    Regarde cette discussion : https://www.developpez.net/forums/d1...e/#post8506076

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai une autre question.
    Le fichier en entrée comporte 2 données :
    NOM PIC X(32)
    PRENOM PIC X(32)

    Ces 2 données peuvent être valorisées comme suit :
    NOM --> DURAND
    PRENOM --> JEAN HUGUES

    En sortie du programme, j'ai la donnée DESTINATAIRE en PIC X(24) qui doit être valorisée par la concaténation du NOM et PRENOM.

    Quel est le code à écrire pour obtenir comme valeur dans la donnée DESTINATAIRE --> DURAND JEAN HUGUES

    Si je fais un STRING NOM PRENOM DELIMITED BY SIZE INTO DESTINATAIRE

    j'obtiens cette valorisation --> DURAND

    Je n'ai pas le JEAN HUGUES

    Merci pour aide

  8. #8
    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.
    Un truc comme ça devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    000650     string NOM     delimited by "^^ "
    000000            "^"
    000000            PRENOM delimited "^^"
    000000       into DESTINATAIRE.
    000000*   "^^" = 2 espaces, "^" = 1 espace
    Pense à utiliser, éventuellement, les fonctions TRIM, TRIML et TRIMR si elles existent chez toi.

  9. #9
    Invité
    Invité(e)
    Par défaut
    merci beaucoup tout fonctionne

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/01/2014, 09h28
  2. Mettre au format des cellules
    Par patmar83 dans le forum Conception
    Réponses: 3
    Dernier message: 10/07/2013, 13h14
  3. mettre en position fixe des frames
    Par annuni dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 12/11/2007, 19h25
  4. Peut-on mettre en place des séparateurs de milliers en PHP ?
    Par Yagami_Raito dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2007, 15h00
  5. Formater un nombre avec des séparateurs de milliers
    Par lagotonio dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2007, 19h23

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