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 :

Test de LOW-VALUE sur une variable en COMP-x


Sujet :

Cobol

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur et formateur Mainframe
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur et formateur Mainframe
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 103
    Points
    103
    Par défaut Test de LOW-VALUE sur une variable en COMP-x
    Bonjour,

    Soit une variable déclarée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    01 TOTO PIC S9(5) COMP-6.
    Dans le code on trouve ensuite cette instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF TOTO = LOW-VALUE
        ...
    END-IF
    La compilation sous MicroFocus se passe sans problème. En revanche avec AcuCobol la compilation se plante avec le message suivant : ERROR: TOTO is illegal type in this context

    Passer la variable en COMP-3 ou autre ne change rien. Seul le décimal étendu passe à la compilation.

    Quelqu'un a-t-il déjà rencontré ce problème ? Y a-t-il une option de compilation particulière permettant d'accepter ce test ?

    D'avance merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 765
    Points : 10 748
    Points
    10 748
    Par défaut
    Bonjour, de manière générale je ne mets jamais du LOW-VALUE dans du numérique (même étendu). Car même si tu passes à la compilation, tu planteras à l'exécution ... Autrement si tu veux vraiment outrepasser ça, tu fais un MOVE de ta variable numérique dans une zone groupe composée de niveaux 88 dont une contiendra la valeur LOW-VALUE.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                         
    03 W-TP-TEST                  PIC X(6).       
          88 W-LOW-VALUE        VALUE LOW-VALUE.
          88 W-SPACE            VALUE SPACE.    .
    Tu fais un MOVE de ta zone en 9 (étendue) dans W-TP-TEST
    Et tu testes le IF W-LOW-VALUE

  3. #3
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Pour moi, la constante figurative LOW-VALUE est de type alphanumérique. Donc la comparer avec une donnée de type numérique n'a pas de sens.

    Le fait que la compilation passe avec le compilateur Microfocus signifie juste que ce dernier a un comportement laxiste ...

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur et formateur Mainframe
    Inscrit en
    Février 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur et formateur Mainframe
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 44
    Points : 103
    Points
    103
    Par défaut
    Merci pour vos réponses. Elles me permettent de conforter la solution que j'ai proposée sur mon projet, à savoir remplacer l'évaluation de TOTO avec LOW-VALUE par une évaluation avec IS NUMERIC.

    Je clos la discussion.

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Sur le COBOL du Mainframe IBM (Enterprise COBOL 4.2) on a :

    Avec cette variable 1 A PIC S9(5) BINARY. et ces instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF A = LOW-VALUE 
           NEXT SENTENCE 
    END-IF
    on obtient le message d'erreur suivant !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IGYPA3022-S "A (BINARY INTEGER)" was compared with "LOW-VALUE".  The comparison was 
                discarded


    Avec 1 B PIC S9(5) PACKED-DECIMAL. on a !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IGYPA3022-S "B (PACKED INTEGER)" was compared with "LOW-VALUE".  The comparison was 
                discarded
    CQFD

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 131
    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 131
    Points : 38 551
    Points
    38 551
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Attention : BernardBZH utilise un format microfocus comp-6, or ce format n'existe pas sur mainframe.

    Sur Z/OS, avec du format binaire (COMP ou COMP-4), on ne peut pas utiliser le test de numéricité (IF xxxx IS NUMERIC), le compilateur produit l'erreur suivante :
    IGYPA3256-S "BI-NS1 (BINARY INTEGER)" did not have a valid type for the specified class condition

    Peut etre en est-il de même sur microfocus.

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

Discussions similaires

  1. Test multiple sur une variable non définie
    Par Rei Angelus dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/12/2007, 22h01
  2. Test sur une variable tableau évoluée
    Par p_12345 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/12/2007, 09h52
  3. [Tableaux] Problème de test sur une variable
    Par Laurent64 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2007, 14h04
  4. faire un test sur une variable
    Par donny dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 15h55

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