Précédent   Forum des professionnels en informatique > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2011, 15h32   #1
Membre confirmé
 
Avatar de rockley
 
Homme
Inscription : décembre 2010
Messages : 280
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Arménie

Informations forums :
Inscription : décembre 2010
Messages : 280
Points : 215
Points : 215
Par défaut Question sur Evaluate

Bonjour tout le monde.

Voilà mon problème

J'ai une structure du type
Code :
1
2
3
4
5
6
7
8
Evaluate COD Of CLIENT
    When "A"
    When "B"
              Move "O"        to      SERT_A_RIEN                              
    When other
              Perform CLIENT_ACTION
End-Evaluate
En rouge c'est ce que j'ai rajouté.
Comme vous pouvez le voir je doit faire une action qui sert à rien pour ne pas aller dans WHEN OTHER.

Comment je peux le faire plus proprement ?
(En java ce serait l'équivalent d'un BREAK)

Merci d'avance de votre aide.
rockley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 17h27   #2
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 673
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 673
Points : 2 174
Points : 2 174
Envoyer un message via Skype™ à Hédhili Jaïdane
Bonjour.

J'aurais mis :
Code :
1
2
           When "A" When "B" CONTINUE
et si tu n'as pas CONTINUE tu PERFORM un paragraphe vide
Code :
1
2
3
4
5
6
           When "A" When "B" PERFORM VIDE
...
       VIDE.
           Exit.
       END-VIDE.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 17h43   #3
Membre confirmé
 
Avatar de rockley
 
Homme
Inscription : décembre 2010
Messages : 280
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Arménie

Informations forums :
Inscription : décembre 2010
Messages : 280
Points : 215
Points : 215
Tout d'abord merci pour ta réponse.

J'ai bien le continue mais si je ne me trompe pas il passe par WHEN OTHER quand même quand tu le fait.

Au pire je fait un IF mais faire un
Evaluate COD Of CLIENT contenant un IF COD = ...
C'est pas propre non plus.
rockley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 17h54   #4
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 673
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 673
Points : 2 174
Points : 2 174
Envoyer un message via Skype™ à Hédhili Jaïdane
- Si tu as le CONTINUE, ça marche (testé). Il va se comporter comme l'instruction impérative et donc s'arrête quand il rencontre un autre WHEN.

- Si on utilise l'EVALUATE c'est justement pour éviter les IF

- Si tu n'es pas obligé d'utiliser l'EVALUATE (j'ai cru à un cas d'école), on peut tout remplacer par un
Code :
IF COD of Client not = "A" and "B" perform CLIENT_ACTION
Rien ne vaut les tests
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 08h35   #5
Membre confirmé
 
Avatar de rockley
 
Homme
Inscription : décembre 2010
Messages : 280
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Arménie

Informations forums :
Inscription : décembre 2010
Messages : 280
Points : 215
Points : 215
Merci de ton aide et pour les explications.
rockley est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 15h32   #6
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
Citation:
Envoyé par rockley Voir le message
...
Comment je peux le faire plus proprement ?
(En java ce serait l'équivalent d'un BREAK)
A mon sens, l'instruction EVALUATE du COBOL se comporte déjà comme les instructions switch ... case + break en JAVA.
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 09h47   #7
Expert Confirmé
 
Inscription : décembre 2007
Messages : 1 911
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 911
Points : 3 721
Points : 3 721
Citation:
Envoyé par Luc Orient Voir le message
A mon sens, l'instruction EVALUATE du COBOL se comporte déjà comme les instructions switch ... case + break en JAVA.
Sauf que le switch(JAVA, C#) ne marche pas sur des booléens. Ce qui interdit, dans ces langages, de retourner l'interrupteur, alors que ça marche très bien en Cobol et en VB, du genre :

Code :
1
2
3
4
5
6
EVALUATE TRUE
    WHEN COD OF CLIENT NOT EQUAL 'A' AND 'B'
        PERFORM CLIENT-ACTION
    WHEN OTHER
        CONTINUE
END-EVALUATE
Code :
1
2
3
4
5
6
Select Case True
    Case (not(Client.Cod = "A") and not(Client.Cod = "B"))
        Call ClientAction()
    Case else
        a = a
End Select
Je n'ai jamais compris pourquoi Microsoft a retiré cette possibilité du C#.NET, alors qu'ils l'ont gardé dans son jumeau VB.NET dérivé du VB6. Parceque c'est bien pratique pour coder proprement des aiguillages complexes(même si dans le cas présenté par Rockley, c'est juste une coquetterie) sans passer par des hordes de ElseIf tous moches.
__________________
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.
el_slapper est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 20h34   #8
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
Citation:
Envoyé par el_slapper Voir le message
Sauf que le switch(JAVA, C#) ne marche pas sur des booléens. Ce qui interdit, dans ces langages, de retourner l'interrupteur, alors que ça marche très bien en Cobol et en VB ...
ça veut dire quoi ... retourner l'interrupteur ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 13h31   #9
Expert Confirmé
 
Inscription : décembre 2007
Messages : 1 911
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 911
Points : 3 721
Points : 3 721
Citation:
Envoyé par Luc Orient Voir le message
ça veut dire quoi ... retourner l'interrupteur ?
Bon, d'accord, c'était pas clair. Mea maxima culpa.

En fait, ce que je voulais dire, c'est qu'on peut, en Cobol ou en VB, mettre la condition réelle non pas dans la ligne initiant le switch/evaluate/select, mais dans chaque ligne qui suit :
Code :
1
2
3
4
5
EVALUATE A
   WHEN 1 PERFORM A1
   WHEN 2 PERFORM A2
   WHEN 3 PERFORM A3
END-EVALUATE
étant remplaçé part
Code :
1
2
3
4
5
EVALUATE TRUE
   WHEN A = 1 PERFORM A1
   WHEN A = 2 PERFORM A2
   WHEN A = 3 PERFORM A3
END-EVALUATE
Ce qui tel quel n'a pas d'interêt, sauf si les conditions deviennent plus compliquées(ce qui est fréquent en info de gestion), du genre :

Code :
1
2
3
4
5
6
EVALUATE TRUE
   WHEN A = 1 AND B = 1 PERFORM A1B1
   WHEN A = 1 PERFORM A1BAUTRE
   WHEN A = 2 PERFORM A2
   WHEN A = 3 PERFORM A3
END-EVALUATE
Et là, on ne peut plus(ou alors en imbriquant des IF qui nuisent à la lisibilité) "retourner l'interrupteur" pour le remettre dans l'EVALUATE.

J'avoue que ma formulation était, euh, "ambigue".
el_slapper est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web