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 :

Conversion numérique signé de cobol en java


Sujet :

Cobol

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2003
    Messages : 50
    Points : 76
    Points
    76
    Par défaut Conversion numérique signé de cobol en java
    Bonjour à tous,

    Je reçoit un fichier créé en cobol avec du numérique étendu S9(16)V9(02).
    le fichier est en txt.

    Y a-t-il une méthode java pour traduire cette zone numérique signée en Double ou Float ?

    Merci d'avance.

    JMM

  2. #2
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Si je ne me trompe pas...
    S9(16) = 17 caractères
    V9(02) = 2 caractères

    Je ne connais pas vraiment de méthode, mais vous devriez pouvoir parser votre fichier...
    Je me doute que vous devriez y avoir penser avant, mais si d'autres se posent la question de ce que je sous-entendais :
    • Lire 17 caractères
    • Les transformer en float/double (var a)
    • Lire 2 caractères
    • Les transformer en float/double (var b)
    • var b = b / 100
    • var a = a + b


    Je ne me souviens plus si on peut transformer directement une string en float ou double...
    Au pire : d'abord passer par un int, puis le transformer en double/float (et effectuer la division après, évidemment )

    EDIT : Je ne suis pas un expert Java, mais toutes ces opérations ne sont pas compliquées si je me souviens bien de mes bases Java !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2003
    Messages : 50
    Points : 76
    Points
    76
    Par défaut
    En fait la zone numérique signée contient par exemple :
    "00000000001818678G"

    S9(16) = 0000000000181867
    V9(2) = 8G (le signe est contenu ici je pense)

  4. #4
    Membre expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Points : 3 532
    Points
    3 532
    Par défaut
    Oula... le tout petit peu de COBOL que j'ai ne me permet pas de vous aider plus...
    Dans la doc, en effet il est question de mettre le signe au début ou à la fin (leading/trailing), et avec ou sans espacement par rapport au chiffre...

    Je n'ai pas trouvé de tableau avec la signification du G...

    Je vais laisser les vrais expérimentés vous répondre
    Mais pour parser, du coup, il suffira de changer quelques valeurs, et faire un switch/case sur le dernier caractère pour faire * (- 1) ou pas !
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  5. #5
    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.

    En S9(16)V9(02), "00000000001818678G" signifie que ton nombre est égal à +0000000000181867,87 (sans position pour le signe ni le point décimal); parce que le "G" est représenté par X"C7"(en EBCDIC) ou X"47" (en ASCII). Par défaut le signe est TRAILING non SEPARATE, il va donc se trouver dans le premier demi-octet (de gauche) du dernier octet. En EBCDIC, "F" et "C" pour indiquer l'absence de signe ou le signe positif, tout autre caractère indique le signe négatif, entre autres le "D".

    AMHA, et pour éviter une usine à gaz, il faudrait peut être penser à changer à l'interface qui génère le fichier texte pour générer le nombre en étendu avec signe SEPARATE LEADING ou TRAILING (le point décimal n'occupe pas de place et est interprété à la lecture selon le format qu'on veut) ou même directement en FLOAT Simple ou Double précision, des formats que Java pourra traiter sans s'arracher les cheveux.

    Dans le premier cas, tu vas avoir ton nombre comme ceci : "+000000000018186787", il suffit de le considérer comme un string, le convertir en long integer puis le diviser par 100.

  6. #6
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    un autre moyen (mais c est très moche) est d'analyser ce dernier caractère, en fonction des conventions cobol, pour le signe plus un C est mis sur l'avant dernier demi octet , pour le signe moins un D.
    aussi tu peux interpréter cette lettre comme :

    é : le chiffre 0 signe + pour le montant total
    A 1 +
    B 2 +
    C 3 +
    D 4 +
    E 5 +
    F 6 +
    G 7 +
    H 8 +
    I 9 +
    J 1 signe - sur le montant total
    K 2 -
    L 3 -
    M 4 -
    N 5 -
    O 6 -
    P 7 -
    Q 8 -
    R 9 -

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    Septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 61
    Points : 124
    Points
    124
    Par défaut
    Pourquoi ne pas passer par une variable en redefines en +9(16),99 ?

    ça mesure 21 de long et ce sera plus facile à parser

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2003
    Messages : 50
    Points : 76
    Points
    76
    Par défaut
    merci à tous pour vos réponses. Je crois que je vais parser en prenant en dur le caractère et en le remplaçant.

    Pour info, je ne suis pas mettre de l'édition du fichier qui est généré par du Cobol. Il vient d'un service extérieur à ma boite.

    Merci encore.
    JMM

  9. #9
    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 jmmaugis Voir le message
    (.../...)
    Pour info, je ne suis pas mettre de l'édition du fichier qui est généré par du Cobol. Il vient d'un service extérieur à ma boite.

    Merci encore.
    JMM
    Donc c'est le bon choix. J'ai moi-même implémenté cette solution "sale" sur certaine macros VB6 d'analyse de mes fichiers MVS. Ca marche très bien.
    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.

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

Discussions similaires

  1. de cobol vers java
    Par CobolProgrammator dans le forum z/OS
    Réponses: 4
    Dernier message: 18/02/2009, 16h45
  2. [SSIS]Conversion Numérique --> Date
    Par BOginer dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 24/08/2007, 19h33
  3. [Axis]Problème de conversion de xsd:nil en objet java
    Par caro_a dans le forum Services Web
    Réponses: 2
    Dernier message: 09/02/2007, 13h53
  4. Perl Conversion numérique en carractère
    Par pouet33 dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2006, 11h46

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