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 :

Récupérer les valeurs de zones compressées fichier Cobol


Sujet :

Cobol

  1. #21
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Le problème peut provenir d'une transco EBCDIC/ASCII par exemple (ou tout autre jeu de caractères), on rencontre souvent des soucis lors de transferts entre plateformes hétérogènes

  2. #22
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Il semblerait qu'il y'ait des changements de syntaxe Cobol dans mon fichier texte, passant de la Version 1 à la version 2 (V1 V2 a la fin de certaines lignes)

    Cela vous dit-il quelques chose?

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Bonjour
    Gaffe en traitant les fichiers "texte" avec du COMP dedans; ce n'est plus un vrai fichier "txt".

    si une zone en comp contient les caractères CRLF (ou Cr ou Lf), la visualisation est "bizarre" via un editeur de texte.
    Certains caractères peuvent perturber le programme, x'00' peut être interpréter comme une fin de chaine, ca dépend des langages et/ou des options.
    comment est traité x'08' (ou backspace) etc .....

    J'ai regardé vite fait le fichier, il n'a pas de structure fixe,
    * les longueurs de records, ca dépend des lignes (ca doit dépendre de cr/lf présent dans des zones de comp).
    * certaines colonnes ne sont pas du TEXTE alors que la ligne suivante, c'est du texte.

    Et comme le suggère le collègue, il faut verifier l'encodage du fichier, ANSI <> ISO8859-1 <> utf-8 <> MS1252 , tous 4 utilisés par Windows.
    Ultradit l'ouvre en MS1252.
    Je ne connais pas le Cobol Windows pour aller plus loin.

    Mais sans une description exacte du fichier, tu risques de passer énormément de temps du le sujet.

  4. #24
    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.

    Perso je ne pense pas qu'un changement en fin de ligne ait une quelconque incidence sur le décalage, j'ai pensé pluôt à un changement de structure du fichier entrant.
    Ceci dit, et à titre d'exemple et en reprenant le dernier code posté,
    - en supposant qu'il y a un changement de structure et qu'on peut identifier les enregistrements pour leur appliquer la structure adéquate
    - Dans le code suivant, à adapter, je vais utiliser 2 structure qui diffèrent d'un caractère, si, par exemple, il y a un décalage à gauche d'un caractère, je vais utiliser 294 au lieu de 295, si au contraire, il y a un décalage à droite d'un caractère, je vais utiliser 296 au lieu de 295. Ensuite au lieu d'utiliser In-Digit1 j'utiliserais In-Digit2 :

    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
    FILE SECTION.
           FD  in-file.
           01  in-line1.
               05  In-Beginning1        PIC X(295).
               05  In-Digit1            PIC S9(9) COMP-3.
               05  In-End1              PIC X(250).
               05  In-Carriage-Return1  PIC X(2).
           01  in-line2.
               05  In-Beginning2        PIC X(294).
               05  In-Digit2            PIC S9(9) COMP-3.
               05  In-End2              PIC X(250).
               05  In-Carriage-Return2  PIC X(2).
           FD  out-file.
            01  out-line.
               05  Out-Beginning       PIC X(295).
               05  Out-Sign            PIC X(1).
               05  Out-Digit           PIC 9(9).
               05  Out-End             PIC X(250).
               05  Out-Carriage-Return  PIC X(2).
    .../...
         * critère de selection 
             if .....
                Move In-Digit1 to out-digit
             else
                Move In-Digit2 to out-digit

  5. #25
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Merci pour votre aide,

    C'est une bonne idée pour corriger le décalage.

    Je sais que le décalage intervient si la ligne d'avant est inférieur à 20 caractères.

    Il faudrait tester la taille de la ligne, savez-vous comme cela se code en Cobol ?

    Merci

  6. #26
    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, mais ça me parait pas trop orthodoxe comme critère.

    - il y a bien la fonction LENGTH mais elle renvoie la longueur totale de la zone telle que définie dans le PIC sauf pour les zones à longueur variable ou en occurs depending.
    Donc elle ne passera peut être pas.
    faire : compute long = length (in-line)
    long pic 9(9) display ou comp-3

    - ou utiliser l'instruction INSPECT In-Line TALLYING compteur FOR CHARACTERS BEFORE INITIAL x"1310' [CR/LF]
    compteur 9(5) display ou comp-3 à initialiser à 0 avant.

    - ou utiliser une petite boucle et tu y vas à la mano.

    Tout dépendra de ton compilo

  7. #27
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Pouvez-vous l'intégrer à la moulinette en Cobol de El_Slapper car je ne maîtrise pas du tout ce langage et j'ai des erreurs dans tout les sens..

    Merci

  8. #28
    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 058
    Points
    32 058
    Par défaut
    Franchement, COBOL n'est pas fait pour les fichiers de longueurs variables, donc je serais partisan de la troisième et dernière solution de notre modérateur préféré : travailler caractère par caractère.

    Donc un fichier en entrée ou on ne prend qu'un seul caractère. Avec des variable mises à jour à chaque fois de "dernier caractère lu" et "avant-dernier caractère lu". Avec une rupture si ça fait X'1310'. Et un stockage de la ligne entre deux ruptures, avec compteur de longueur. Et ensuite, on applique le mapping que l'on veut. Mais c'est un gros truc à faire, et là, maintenant, je bosse.....

    (ou alors un script Python ou VBA, mais j'ai un doute, avec tous ces caractères spéciaux, il y aurait un risque de mauvaise interprétation).
    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.

  9. #29
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Oui c'est surement la meilleure des solutions ça sera plus précis

    Merci de votre aide (quand vous aurez le temps )

  10. #30
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    Franchement, COBOL n'est pas fait pour les fichiers de longueurs variables, donc je serais partisan de la troisième et dernière solution de notre modérateur préféré : travailler caractère par caractère.
    Et pourquoi donc ? il y a au contraire tout ce qu'il faut pour gérer le format variable au sein d'un programme COBOL (en tout cas avec les versions successives du mainframe jusqu'à Z/OS inclus), des difficultés peuvent se présenter hors COBOL et principalement quand on travaille sur un poste client, la plupart des outils mainframe prenant en compte parfaitement les fichiers variables

  11. #31
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Dans mon fichier texte, les lignes ont bien toutes la même structure de données mais a un moment donné pour certaines d'entre elle il se produit un retour à la ligne alors qu'elle n'est pas terminé ce qui coupe la ligne en deux parties et au final fait que les lignes ne sont pas de même taille mais on voit bien que la structure des données de la ligne est la même.

  12. #32
    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
    Citation Envoyé par Marco_Folio Voir le message
    Dans mon fichier texte, les lignes ont bien toutes la même structure de données mais a un moment donné pour certaines d'entre elle il se produit un retour à la ligne alors qu'elle n'est pas terminé ce qui coupe la ligne en deux parties et au final fait que les lignes ne sont pas de même taille mais on voit bien que la structure des données de la ligne est la même.
    Certainement à cause de ce que disaient mes collègues à savoir un nombre en comp-3 qui contient un x"1310" interprété comme comme un CRLF.
    Essaie avec/sans un LINE SEQUENTIAL dans le SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT in-file ASSIGN "C:\Perso\input.txt"
                   ORGANIZATION LINE SEQUENTIAL

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Citation Envoyé par Marco_Folio Voir le message
    Dans mon fichier texte, les lignes ont bien toutes la même structure de données mais a un moment donné pour certaines d'entre elle il se produit un retour à la ligne alors qu'elle n'est pas terminé ce qui coupe la ligne en deux parties et au final fait que les lignes ne sont pas de même taille mais on voit bien que la structure des données de la ligne est la même.
    Tu as un retour à la ligne car une zone en COMP contient x'0D0A', donc un retour à la ligne suivante pour un fichier texte normal.
    Tu veux traiter un fichier en mode "TXT" alors qui contient un peu de tout.

    Pour passer, il faut lire par groupe d'octets (le groupe peut aller de 1 à n éléments) et reconstruire le tout.

    Si cela est possible, la lecture devra se faire en mode "binaire" pour éviter toute conversion de caractères au moment du "read".

  14. #34
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    En effet avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORGANIZATION LINE  SEQUENTIAL
    Il n' y a plus de décalage après la décompression.

    Bien joué ! On y est presque!

    Une fois les valeur décompressées j'en ai certaines ou il y'a une lettre a la fin -0046524r en hexa "2D 30 30 34 36 35 32 34 72"

    J'utilise la commande PIC S9(9) COMP-3.

    Quelle est la différence avec PIC S9(9)V99 COMP-3 ?

    En utilisant PIC S9(7) COMP-3 je ne récupère pas la valeur entièrement.

    Merci

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    V99 c'est pour dire qu'il y a 2 chiffre après la virgule, cela va te prendre 1 octet supplémentaire en comp-3.

    ceci étant dit, et en insistant, sans la description exacte du fichier, ce travail est impossible à faire sérieusement.
    mes arguments:
    - Le record 10, son format ne ressemble pas aux records précédents.
    - Le record 11 à une longueur supérieure de 1 par rapport aux records précédents.

    Et cela sur un fichier de 16 lignes.
    Ce sent le fichier avec des records de taille variable avec des descriptions multiples (REDEFINE de zones).

    bonne journée
    a+

  16. #36
    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 058
    Points
    32 058
    Par défaut
    Citation Envoyé par Marco_Folio Voir le message
    En effet avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORGANIZATION LINE  SEQUENTIAL
    Il n' y a plus de décalage après la décompression.
    (.../...)
    Cool, j'ai appris quelque chose.

    Citation Envoyé par Marco_Folio Voir le message
    Une fois les valeur décompressées j'en ai certaines ou il y'a une lettre a la fin -0046524r en hexa "2D 30 30 34 36 35 32 34 72"
    (.../...)
    Comme le dit Bernard, ça pue le fichier multiformat. la chaine hexa que tu nous a donné correspond exactement, en ASCII, à "-0046524r". Est-ce que tu l'as avant de passer dans la moulinette, ou après? Si c'est ce que tu as en entrée, alors "-0046524r" est bien le contenu du fichier. Si c'est de la sortie, il nous faut connaitre l'entrée.
    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.

  17. #37
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    "-0046524r" est la valeur que j'obtiens en sortie

    Je prends l'exemple d'une autre valeur :

    En hexa en entrée j'ai "31 02 7D" en sortie j'obtiens "2D 30 30 30 30 33 31 30 32 37" (-000031027)

    La commande ORGANIZATION LINE SEQUENTIAL m'évite bien les décalages après les sauts de lignes mais certaines valeurs sont quand même faussées comme par exemple "+0105196=0" ou "+076500000" décalage vers la gauche qui enlève un chiffre.

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Regarder le fichier joint, on voit très bien des différences et là ou le bazard commence.

    Sans la description exacte du fichier, ce travail est impossible ou très difficile, avec un résultat qui risque de ne pas être celui désiré.
    Comme il est surement question d'argent, je refuserai de faire le travail
    a+
    Fichiers attachés Fichiers attachés

  19. #39
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Merci pour le fichier, effectivement on voit bien ou a lieu le décalage.

    Je n'ai malheureusement pas la description exacte du fichier

    Je ne dispose de plus beaucoup de temps, connaissez vous des entreprises ou personnes sérieuses pouvant effectuer ce genre de travail?

  20. #40
    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
    Tous ceux qui sont intervenus dans cette discussion sont des pros et de grand calibre. Personnellement, et depuis le temps que triture des données dans tous les sens, je suis incapable de faire correctement ce genre de traitement dans ces conditions. Ceci dit ce n'est qu'un avis personnel.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/07/2009, 08h45
  2. récupérer les valeurs d'une zone de liste à sélection multiple
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 09/07/2009, 21h19
  3. Réponses: 3
    Dernier message: 12/10/2008, 22h04
  4. Réponses: 4
    Dernier message: 03/08/2007, 14h09
  5. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 17h38

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