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 :

[PC-Percobol] Vérifier une saisie.


Sujet :

Cobol

  1. #1
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut [PC-Percobol] Vérifier une saisie.
    Bonjour,

    J'ai le problème suivant.

    Je demande à l'utilisateur de saisir un nombre et, selon ce nombre, je vérifie que l'enregistrement existe ou non.

    Le nombre à saisir est de déclaration PIC X(6).

    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
               IF W-TEMP IS NUMERIC THEN
                 START FVOL IS KEY = F-NUMVOL
                   INVALID KEY
                   DISPLAY "Aucun vol ne correspond à votre saisie."
                     AT LINE 20 COLUMN 05
                     SUBTRACT 1 FROM W-COMPTEUR
                   NOT INVALID KEY
                     PERFORM CONTINUER
                 END-START
               ELSE
                 DISPLAY "Veuillez saisir un numéro de vol."
                   AT LINE 20 COLUMN 05
                 SUBTRACT 1 FROM W-COMPTEUR
               END-IF
    Le problème étant que la saisie, sinon avec les 6 numéros, renverra à chaque fois une erreur car la saisie étant en X(6) sera "remplie" par des espaces.

    Et les espaces ne sont pas des numériques >.<

    Sinon je peux dire que c'est une variable en 9(6)...
    Mais en ce cas, s'il saisit un alpha, il est convertit en numérique et j'obtiens un résultat 000000... Donc ça passe outre mon test :/

    Une idée ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 176
    Points : 188
    Points
    188
    Par défaut
    il y a probablement plus joli comme méthode, mais avec un "unstring" tu peux t'en sortir

    tu fais un
    unstring W-TEMP delimited by " " into W-TEST COUNT IN W-lg
    on overflow
    perform erreur (ca voudrait dire qu'il y a deux saisies avec un espace au milieu)
    end-unstring

    comme ca la t'as la taille de ton W-TEST sans espace.
    (tu crée W-TEST de même caractéristique que W-TEMP, et W-lg Pic 9(1 ou 2)

    il te reste qu'a faire un
    if W-TEST(1:W-lg) is numeric

    Ca devrait marcher non?

  3. #3
    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 veut accepter les blancs, on peut en fonction du cas, tous ou au début, faire qque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Inspect W-TEMP Converting         ' ' to '0'             
       ou, Inspect W-TEMP Replacing Leading  ' ' by '0'             
           If      W-TEMP is numeric and not = zero then .........
    l

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 176
    Points : 188
    Points
    188
    Par défaut
    Est ce que l'enregistrement colle la donnée saisie par l'utilisateur à droite?
    sinon Inspect W-TEMP Converting ' ' to '0' pourrait mener à des résultats faux si on se retrouve avec des espaces à droite...

    10 deviendrait 100000...

    inspect leading c'est mieux, mais si on a des espaces a droite ca ne règle pas le problème...

    En revanche si la saisie est collée à droite ca fonctionne (mais je ne crois pas que ca soit fait comme ca par défaut, si?)

  5. #5
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    @funfox

    Merci pour la réponse.

    Cependant, je ne comprends pas la notation suivante :

    Pourrai-je avoir une explication? :3

    @Homer-ac

    Merci de même, cette solution me semble plus "conviviale"
    J'ai testé, et c'est nickel


    Réponse rapide et performante °o°
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Hum.

    En fait, vu que c'est un X(6), il y a un cadrage à gauche de la valeur saisie.

    Par contre, comment le inspect pourrait renvoyer une fausse valeur ? Je n'ai pas comprit
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    En fait non, pas nickel... Comme dit plus haut

    Vu que le cadrage est à gauche, j'obtiens:

    Saisie : 7 7 7_ _ _

    Les _ symbolisant les espaces.

    Du coup, il va me chercher un identifiant 777000 et non pas 000777
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 176
    Points : 188
    Points
    188
    Par défaut
    je fais peut etre fausse route mais :

    si tu as écrit '10'
    dans ta donnée il y aura '10(et 4 espaces)'
    donc si tu fais
    Inspect W-TEMP Converting ' ' to '0'
    ca ne va pas transformer ta donnée en
    '100000' ?


    pour W-TEST(1:W-lg)

    1 c'est le placement, et W-lg la longueur
    ca te permet de prendre une "sous-string" de W-TEST, de taille W-lg, débutant au caractère 1... ce qui est dans ton cas pile ce qui a été écrit, sans les espaces.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Deallyra,

    Si, comme je le pense, PERCOBOL supporte SQL, fais un essai en utilisant la fonction CAST qui te permet, sous SQL, de convertir dans une zone numérique des caractères numériques placés dans une zone alphanumérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    01 MaZoneAlpha PIC X(6).
    01 MaZoneNum PIC 9(6).
    Exec SQL SET :MaZoneNum = CAST(:MaZoneAlpha as numeric(6, 0))
    A l'issue de l'opération SET ci-dessus, si MaZoneAlpha contient la valeur '777___', MaZoneNum contiendra la valeur 000777.

  10. #10
    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
    En gros bourrin, je ferais une boucle dédiée. En supposant que tu est alignée à gauche.....

    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
    MOVE 0 TO J
    PERFORM VARYING I FROM 6 BY -1 UNTIL I > 1
       IF F-NUMVOL ( I : 1 ) = SPACE OR LOW-VALUE
          CONTINUE
       ELSE
          MOVE I TO J
          MOVE 0 TO I
       END-IF
    END-PERFORM
    COMPUTE K = 7 - J
    IF K < 7
       MOVE F-NUMVOL ( 1 : J ) TO W-SAUVEGARDE ( 1 : J )
       MOVE ZEROES TO F-NUMVOL
       MOVE W-SAUVEGARDE ( 1 : J ) TO F-NUMVOL ( K : J )
    END-IF
    ma boucle calcule la dernière position remplie de ton bidule, prends ce qui est rempli, et le fout à la fin de ta donnée, tout en ayant forçé le reste à zéros. Bourrin, Moche, mais ça devrait marcher. J'ai par contre supposé que tes données sont collées à gauche. Si elles sont collées à droite, tu te contentes de remplacer tous les espaces/low-value devant par des zéros. Si tu n'en sais rien, il faut d'abord faire cette seconde manoeuvre avant de recaler le reste à droite.....Ah, j'ai aussi supposé que F-NUMVOL était alpha.

    INSPECT, c'est bien, mais quand on commence à avoir des données mal positionnées(ce qui peut être ton cas), ça montre vite ses limites.
    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.

  11. #11
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Citation Envoyé par Mercure Voir le message
    Deallyra,

    Si, comme je le pense, PERCOBOL supporte SQL, fais un essai en utilisant la fonction CAST qui te permet, sous SQL, de convertir dans une zone numérique des caractères numériques placés dans une zone alphanumérique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    01 MaZoneAlpha PIC X(6).
    01 MaZoneNum PIC 9(6).
    Exec SQL SET :MaZoneNum = CAST(:MaZoneAlpha as numeric(6, 0))
    A l'issue de l'opération SET ci-dessus, si MaZoneAlpha contient la valeur '777___', MaZoneNum contiendra la valeur 000777.
    Unexpected get-parameters in statement: "SET :W-TEMP = CAST(:W-TEMP AS NUMERIC(6, 0))".

    @el_slapper

    En effet, bourrin

    Je retente la version de funfox et si je n'obtiens pas ce que je veux... Ce sera le dernier recours mais bon
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

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

  13. #13
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    J'ai fait une recherche sur DVP mais pas avec le nom de la fonction

    Pour la discussion de Beeges... Je l'avais trouvée par recherche mais je ne l'ai pas lue entièrement puisque l'enregistrement dans un fichier ne me concernait pas... Et je n'ai pas été voir plus loin

    Je regarde du coté de NUMVAL.

    Merci
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 176
    Points : 188
    Points
    188
    Par défaut
    pour info meme si tu vas faire autrement...

    ca marchait ce que j'avais proposé? tu as eu le temps de tester?

  15. #15
    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
    Par coincidence je viens de poster sur ce forum (pour z/OS) un exemple de programme COBOL qui rencontre la même problématique, on reçoit dans une zone alpha du numérique cadrée à gauche. J'ai géré comme ça (j'avais déjà signalé cette méthode sur un autre post)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
               If RETURN-CODE = 0
          *       On prend le comptage reçu pour sa longueur utile
                  Move function reverse(WS-ZLLIB) to WS-WORK
                  Move 0 to WS-CNT
                  Inspect WS-WORK  Tallying WS-CNT For Leading space
                  Compute WS-CNT = length of WS-ZLLIB - WS-CNT
    
          *       Et on alimente nouveau poste du tableau (membre et rang)
                   Move WS-ZLLIB(1:WS-CNT) to TB-MEMBER-RGD(WS-CNT-MBRE)
                   Move .............
               End-if

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    SQL est bel et bien supporté par Percobol. Je viens de m'en assurer en récurant la toile.
    En revanche, je ne comprends pas le message
    Unexpected get-parameters in statement: "SET :W-TEMP = CAST(:W-TEMP AS NUMERIC(6, 0))".
    J'ai cherché aussi sur la toile mais n'ai pas trouvé une réponse qui me satisfasse.
    Comme il manque le END-EXEC dans mon exemple, c'est peut-être pour ça que le compilateur rouspète. Peux-tu stp faire un essai en l'ajoutant à la fin de l'instruction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC SQL SET :W-TEMP = CAST(:W-TEMP AS NUMERIC(6, 0)) END-EXEC

  17. #17
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    J'avais pensé au end-exec

    Et j'ai moi aussi vu que le SQL était supporté...

    Mais j'obtiens tout de même ceci :
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Février 2009
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 176
    Points : 188
    Points
    188
    Par défaut
    tain google est trop puissant...

    je vais sur la toile pour voir si je peux trouver d'autres cas "unexpected get parameters"... et je tombe sur cette page, datant d'il y a 4h, en première page de résultat !

    Sinon le numval a fonctionné?

    Sinon (bis) je ne sais pas, mais je dirait de vérifier par étape : vérifie que
    EXEC SQL SET :W-TEMP = 'test' END-EXEC passe
    puis
    EXEC SQL SET :W-TEMP = :W-TEMP END-EXEC

    si oui, un
    EXEC SQL SET :W-TEMP = cast(:W-TEMP as numeric) END-EXEC
    (...)

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Si ce que te propose funfox ne convient pas, tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC SQL SET :MaZoneNum = DECIMAL(:MaZoneAlpha) END-EXEC
    Au fait, il faut que MaZoneNum soit définie en numérique dans ton cobol, ce qui n'a pas l'air d'être le cas dans avec la fonction CAST comme tu l'as codée dans ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET :W-TEMP = CAST(:W-TEMP ...
    Ici, tu "castes" W-TEMP dans la zone W-TEMP, ce qui me semble assez incohérent...

  20. #20
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Citation Envoyé par funfox Voir le message
    Sinon le numval a fonctionné?
    En bricolant un petit programme de test :
    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
    000100 IDENTIFICATION DIVISION.
    000200 PROGRAM-ID. test.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
               77 W-NUMERIC PIC 9(6).
               77 W-ALPHANUM PIC X(6).
           PROCEDURE DIVISION.
           DEBUT.
            MOVE 777 TO W-ALPHANUM
            DISPLAY "["W-ALPHANUM"]"
            MOVE FUNCTION NUMVAL(W-ALPHANUM) TO W-NUMERIC
            DISPLAY "["W-NUMERIC"]"
            MOVE "abc" TO W-ALPHANUM
            MOVE FUNCTION NUMVAL(W-ALPHANUM) TO W-NUMERIC
            DISPLAY "["W-NUMERIC"]"
            ACCEPT W-NUMERIC
           FIN.
    J'obtiens ceci :


    Ensuite

    Citation Envoyé par funfox Voir le message
    Sinon (bis) je ne sais pas, mais je dirait de vérifier par étape : vérifie que
    EXEC SQL SET :W-TEMP = 'test' END-EXEC passe
    puis
    EXEC SQL SET :W-TEMP = :W-TEMP END-EXEC

    si oui, un
    EXEC SQL SET :W-TEMP = cast(:W-TEMP as numeric) END-EXEC
    (...)
    J'obtiens ceci :


    Citation Envoyé par Mercure Voir le message
    Si ce que te propose funfox ne convient pas, tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC SQL SET :MaZoneNum = DECIMAL(:MaZoneAlpha) END-EXEC


    Citation Envoyé par Mercure Voir le message
    Au fait, il faut que MaZoneNum soit définie en numérique dans ton cobol, ce qui n'a pas l'air d'être le cas dans avec la fonction CAST comme tu l'as codée dans ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET :W-TEMP = CAST(:W-TEMP ...
    Ici, tu "castes" W-TEMP dans la zone W-TEMP, ce qui me semble assez incohérent...
    Cruche inside...


    Citation Envoyé par Homer-ac Voir le message
    Par coincidence je viens de poster sur ce forum (pour z/OS) un exemple de programme COBOL qui rencontre la même problématique, on reçoit dans une zone alpha du numérique cadrée à gauche. J'ai géré comme ça (j'avais déjà signalé cette méthode sur un autre post)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
               If RETURN-CODE = 0
          *       On prend le comptage reçu pour sa longueur utile
                  Move function reverse(WS-ZLLIB) to WS-WORK
                  Move 0 to WS-CNT
                  Inspect WS-WORK  Tallying WS-CNT For Leading space
                  Compute WS-CNT = length of WS-ZLLIB - WS-CNT
    
          *       Et on alimente nouveau poste du tableau (membre et rang)
                   Move WS-ZLLIB(1:WS-CNT) to TB-MEMBER-RGD(WS-CNT-MBRE)
                   Move .............
               End-if
    Je n'avais pas vu ton message... Désolée
    Sur un petit test :
    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
    000100 IDENTIFICATION DIVISION.
    000200 PROGRAM-ID. test.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
               77 W-NUMERIC PIC 9(6).
               77 W-ALPHANUM PIC X(6).
               77 W-TEMP PIC X(6).
               77 WS-CNT PIC 9.
           PROCEDURE DIVISION.
           DEBUT.
             MOVE 123 TO W-ALPHANUM
             MOVE FUNCTION REVERSE(W-ALPHANUM) TO W-ALPHANUM
             MOVE 0 TO WS-CNT
             INSPECT W-ALPHANUM TALLYING WS-CNT FOR LEADING SPACE
             DISPLAY W-ALPHANUM
             ACCEPT W-TEMP
           FIN.
    Cette proposition me renvoie 000321 au lieu de 000123

    Citation Envoyé par funfox Voir le message
    il y a probablement plus joli comme méthode, mais avec un "unstring" tu peux t'en sortir

    tu fais un
    unstring W-TEMP delimited by " " into W-TEST COUNT IN W-lg
    on overflow
    perform erreur (ca voudrait dire qu'il y a deux saisies avec un espace au milieu)
    end-unstring

    comme ca la t'as la taille de ton W-TEST sans espace.
    (tu crée W-TEST de même caractéristique que W-TEMP, et W-lg Pic 9(1 ou 2)

    il te reste qu'a faire un
    if W-TEST(1:W-lg) is numeric

    Ca devrait marcher non?
    Oui et non... Enfin, si je ne me suis pas trompée sur la signification de overflow >.>

    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
    000100 IDENTIFICATION DIVISION.
    000200 PROGRAM-ID. test.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
               77 W-NUMERIC PIC 9(6).
               77 W-ALPHANUM PIC X(6).
               77 W-TEMP PIC X(6).
               77 W-LG PIC 9.
           PROCEDURE DIVISION.
           DEBUT.
            MOVE 123 TO W-ALPHANUM
            UNSTRING W-ALPHANUM DELIMITED BY " " 
              INTO W-NUMERIC COUNT IN W-LG
              ON OVERFLOW
              DISPLAY "Erreur overflow"
            END-UNSTRING
            IF W-NUMERIC(1:W-LG) IS NUMERIC
              DISPLAY W-NUMERIC
            END-IF
            ACCEPT W-TEMP
           FIN.

    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

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

Discussions similaires

  1. comment vérifier une saisie d'entrée est valide
    Par helene0618 dans le forum C#
    Réponses: 9
    Dernier message: 19/02/2008, 18h27
  2. Réponses: 1
    Dernier message: 06/12/2007, 11h47
  3. Comment vérifier une URL saisie dans mon formulaire ?
    Par cdevl32 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 28/10/2007, 18h32
  4. Réponses: 9
    Dernier message: 05/04/2007, 16h23
  5. [Formulaire]vérifier une saisie dans une zone de liste
    Par ludovicparis dans le forum IHM
    Réponses: 6
    Dernier message: 02/04/2007, 14h51

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