11
votes

Dans Cobol, pour tester "NULL ou vide" Nous utilisons "pas = espace [et / ou] de faible valeur"? Lequel est-ce?

Je travaille maintenant dans Mainframe, Dans certains modules, tester

pas nul ou vide

Nous voyons: pas = espace ou faible valeur Le chef dit que nous devrions faire: pas = espace et faible valeur

Lequel est-ce?

merci!


0 commentaires

4 Réponses :


23
votes

chef est correct.

Cobol est supposé em> lire quelque chose comme une langue naturelle (cela s'avère être juste Une autre mauvaise blague). p>

permet de jouer avec les variables et valeurs suivantes: p> xxx pré>

une expression telle que: p> xxx

est assez simple à comprendre. On n'est pas égal à deux donc nous allons faire Tout ce qui suit le puis code>. Toutefois, P>

 IF X NOT = SPACE AND LOW-VALUE THEN...


1 commentaires

À Cobol, il y a beaucoup de mœurs à écrire des conditions comme celle-ci. Beaucoup d'entre eux conduisent à l'ambiguïté ou à une interprétation erronée. Je suis totalement d'accord avec les conseils de @ NEALB.



2
votes

Il convient de noter que la valeur NULL n'est pas toujours la même que la même valeur que celle-ci dépend de l'architecture de périphérique et de son jeu de caractères utilisé comme déterminé par le fabricant. Les ordinateurs centraux peuvent avoir une séquence d'assemblée de rassemblement entièrement différente (code de code de caractères et en ordre de symbole de caractères minimum) et ensemble de symboles par rapport à un périphérique à l'aide de Linux ou de Windows, car vous n'avez aucun doute vu d'ici. Le raccourcissement utilisé dans Cobol pour des comparaisons est parfois utilisé pour les opérations booléennes, comme si un goto Par-5 et si un ou C. Et peut alors être combiné avec des comparaisons de deux variables ou une valeur variable et une valeur littérale. L'analyseur et le compilateur sur différents appareils doivent faire face à ces situations dans une méthode standard (ANSI), mais ce n'est pas toujours la situation.


1 commentaires

Bon point, faible valeur équivaut au caractère de commande le plus bas de la séquence de rassemblage en cours. Ceci est généralement zéro binaire (NULL) mais ne doit pas être. Comme pour si un goto ... Le A doit être un nom de niveau 88 pour que cela soit valide (c'est COBOL après tout). Le difficile est si A = B ou C . Si C est un nom de niveau 88, cela signifie si (a = b) ou c . Toutefois, si C n'est pas un nom de niveau 88, cela signifie si (a = b) ou (a = c) . La seule façon de savoir avec certitude de vérifier comment C a été déclarée (c'est l'une des "fonctionnalités" qui rendent les analyseurs de Cobol si difficiles).



1
votes

Je suis d'accord avec Nealb. Conservez-le simple, évitez «les coupes courtes», faites-la facile de comprendre sans avoir à vous référer au manuel pour vérifier les choses. XXX

Cependant, pourquoi ne pas mettre un 88 sur X, et garder C'est vraiment simple?: xxx

note, dans le Mainframe COBOL, NULL est très limitée au sens et n'est pas le sens que vous l'attribuez, TOM. "Vide" signifie uniquement quelque chose dans un contexte généré par le codeur particulier (cela ne signifie rien à Cobol aussi loin qu'un champ est concerné).

Nous n'avons pas de "chaînes". Par conséquent, nous n'avons pas de "chaînes NULL" (une chaîne de longueur, l'une comprenant la chaîne-terminatrice). Nous n'avons pas de chaînes, donc un champ a toujours une valeur, il ne peut donc jamais être "vide" autre que celui appelé par le programmeur.

oguz, je pense que votre message illustre à quel point quelque chose est complexe Vraiment simple peut être faite et comment cela peut conduire à des erreurs. Pouvez-vous tester vos conditions, s'il vous plaît?


0 commentaires

2
votes

Dans Cobol, il n'y a pas de java null et il n'est jamais "vide".

Par exemple, prenez un champ P>

05  FIELD-1 PIC X(6) VALUE 'BARUCH'.


0 commentaires