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

Administration et Installation Discussion :

Lire des données numériques signées


Sujet :

Administration et Installation

  1. #1
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut Lire des données numériques signées
    Je souhaiterai creer une table SAS à partir d'un fichier issu de l'environnement MVS. Probleme : ces fichiers contiennent des formats numériques signés et je n'arrive pas à les lire avec SAS. Savez vous s'il existe une manipulation pour lire ce type de format ?

    Quel format attribuer à cette donnée pour pouvoir récupérer un champ numérique décimal ?

    Voici a quoi ressemble les données numériques signées
    00000012250000é 00000000000000é 00000000000000é

    Voici le mail d'une personne qui ma expliqué ce qu'était une zone numérique signée



    Les flux transmis sont bien au format définitif (exception faite des éventuelles évolutions entre PJ1 et PJ2), montants inclus.
    Les flux générés par notre ETL sont à destination de l'environnement MVS. Il sortent de notre ETL au format EBCDIC, les différentes données étant restituées dans un format COBOL : Les montants avec décimales n'ont pas de virgule réelle. C'est le "masque" de lecture utilisé sur MVS (par ex copy Cobol) qui va gérer cette virgule virtuelle.
    Ex pour un format S9(10)V9(5) qui correspond à un numérique signé avec 10 chiffres max pour la partie entière et 5 chiffres max pour les décimales : Si le montant issu de GT AIA est de 1 234 567,89, notre ETL transmettra un montant 000123456789000.

    Sur MVS, les montants, selon qu'ils sont packés ou non, signés ou non, etc n'ont pas la même transcription en hexadécimal.

    Ex : Dans le flux Stock Contrat PJ1, sur la donnée "somme des primes" du contrat 3N160001613X. Avec le masque de lecture on a :
    RIV-SOM-PRIM DISPLAY 00000011250000é
    15/SNUM 0000001125.00000

    Le "é" est caractéristique d'un montant MVS signé (c'est le dernier caractère qui porte le signe)
    En hexadécimal, le même champ donne ceci :
    0 0 0 0 0 0 1 1 2 5 0 0 0 0 é
    F F F F F F F F F F F F F F C
    0 0 0 0 0 0 1 1 2 5 0 0 0 0 0

    Une valeur de type 00000000000000é correspond donc à une zone de type numérique signée (format exacte à voir selon le flux et la donnée), le "é" étant un zéro+signe. Le problème est que dans une récupération d'un flux au format texte, le "é" n'a plus vraiment de sens. Il ne correspond à quelque chose que dans un contexte MVS, par rapport à sa correspondance hexadécimale.
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  2. #2
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    rien compris à ton truc !

    J'ai juste noté 2 choses qui pourront t'aider :

    1)
    Il sortent de notre ETL au format EBCDIC
    Il existe un Informat en SAS qui lit l'EBCDIC : S370FF

    2)
    Le problème est que dans une récupération d'un flux au format texte, le "é" n'a plus vraiment de sens.
    A mon avis oublie le é et n'essaie pas de l'importer.

    Le mieux est que tu fasse un test sur la première ligne, premier chiffre. Donc essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data ma_table;
       INFILE 'chemin\nom_de_ton_fichier' obs=1; /*je lis que la première ligne */
       INPUT @1 test S370FF14. ; /*je me positionne sur la première colonne et j'utilise l'informat S370FF pour lire les 14 premiers caractères. */
    run;
    J'ai pas testé, dis moi comment ça se comporte.

    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  3. #3
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut
    merci je vais essayer
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par steelspirit Voir le message
    rien compris à ton truc !

    J'ai juste noté 2 choses qui pourront t'aider :

    1)


    Il existe un Informat en SAS qui lit l'EBCDIC : S370FF

    2)


    A mon avis oublie le é et n'essaie pas de l'importer.

    Le mieux est que tu fasse un test sur la première ligne, premier chiffre. Donc essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data ma_table;
       INFILE 'chemin\nom_de_ton_fichier' obs=1; /*je lis que la première ligne */
       INPUT @1 test S370FF14. ; /*je me positionne sur la première colonne et j'utilise l'informat S370FF pour lire les 14 premiers caractères. */
    run;
    J'ai pas testé, dis moi comment ça se comporte.

    Steel
    Il ne faut oublier le : S9(10)V9(5)
    il faut que tu importes tes données osus format chaîne de caractères.
    faire un découpage de ta chaînes avant_virgule après_virgule
    EX 00000012253000é
    avant_virgule 0000001225 (10 caractères)
    après virgule 3000é (5 caractères)
    tu supprimes le "é"
    tu multiplies le 3000*0.0001
    tu aditionnes le résultats à avant_virgule.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  5. #5
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    ah oui mais j'avais pas vu ça aussi :

    Si le montant issu de GT AIA est de 1 234 567,89, notre ETL transmettra un montant 000123456789000.
    et

    RIV-SOM-PRIM DISPLAY 00000011250000é
    15/SNUM 0000001125.00000
    en fait ici c'est beaucoup plus simple que ce que je croyais, les 5 derniers caractères sont des décimales. Donc si j'ai bien compris : 00000012250000é ça donne 1225.0000 !

    Si c'est le cas, rien de plus simple en SAS, utilise l'informat 14.4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DATA ma_table;
       INFILE 'chemin\nom_de_ton_fichier' obs=1; 
       INPUT @1 test 14.4 ; 
    run;
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  6. #6
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    Il ne faut oublier le : S9(10)V9(5)
    faire un découpage de ta chaînes avant_virgule après_virgule
    pas besoin de découpage l'informat le fait directement

    essaie ça bahraoui :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data test;
       var="00000012250200é";
       test=input(var,14.4);
    run;
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  7. #7
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut
    C'est ce que je fait en fait l'informat 15.5 mais ca ne marche pas !
    Et pour le "é" à la fin de la chaine ???j'en fais quoi ? car c'est celui la qui contient le signe !!!
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  8. #8
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut
    DATA test;
    var="00000012250200é";
    test=input(var,14.4);
    run;
    Cela marche mais je ne suis pas sur que ce soit cela qu'on attende en sortie, toujours à cause de ce "é" !!!
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  9. #9
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Et pour le "é" à la fin de la chaine ???j'en fais quoi ? car c'est celui la qui contient le signe !!!
    A mon avis laisse le tomber pour l'instant. Parceque admettons que é c'est le signe positif, le négatif c'est quoi alors ???

    donc déja fait plutot 14.4 et essaie de demander à ton collègue qui t'a envoyé le mail ce qu'on en fait du é.
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  10. #10
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Il faudra demnder s'il faut multiplier par -1 si la chapine se termine par "é"!!
    Il est codé comment un nombre positif?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  11. #11
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut
    le "é" est utlise que dans un contexte MVS apparement. Si je tiens compte de ce que tu dis, je pense que ca va erroner ma donnée ! Le fait qu'il y est un "é" en fin , ne justifie pas si le signe est + ou - !
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  12. #12
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    c'est pour ça que je dis qu'a mon avis il faut pas en tenir compte surtout si c'est spécifique à MVS !
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  13. #13
    Membre habitué Avatar de pierre24
    Profil pro
    Inscrit en
    Février 2008
    Messages
    391
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 391
    Points : 160
    Points
    160
    Par défaut
    Et alors du coup , comment fait on pour savoir si nous avons a faire à un signe positif ou négatif si l'on ne s'occupe plus du "é" ?
    Pierre24.
    http://www.goguel-blog.com
    Les racistes sont des gens qui se trompent de colère.
    Léopold Sédar Senghor

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    je rencontre le même problème, par contre j'ai un début de réponse : il ne faut pas "éliminer" le "é".
    Pour les numériques signés en Cobol le dernier chiffre est remplacé par une lettre, voici la décodif :
    é : 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 –

    Par contre je n'ai pas encore trouvé le informat SAS permettant de lire ça directement sans passer par une transco à la mano du dernier caractère.

Discussions similaires

  1. Réponses: 13
    Dernier message: 16/06/2010, 12h17
  2. Réponses: 4
    Dernier message: 11/09/2006, 13h47
  3. Comment lire des données d'un fichier XML à partir de java
    Par kamaldev dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 25/08/2006, 19h29
  4. [Excel] Lire des données de excel avec php
    Par Eisy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/03/2006, 17h00
  5. CFile : comment lire des données
    Par romeo9423 dans le forum MFC
    Réponses: 3
    Dernier message: 25/10/2004, 19h10

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