如何测试一个项目是否左对齐?

How to test if an item is left justified?

我不知道如何测试读入的项目是否左对齐。例如,如果我有一个 WORD-IN PIC X(8),我如何创建一个测试来测试是否有任何空白或 "b's" 读入。

Word read in = _____CAT
WORD-IN then equals bbbbbCAT 

我可以测试前导 b 吗?这样做是为了数据验证。如果有的话,前导 b 的数量是随机的,但只有一个会使它不左对齐。

05   word-in.
   07 word-in-x      pic x(01) occurs 8.


if word-in-x(1) is equal to space ...

一些变体:

01  word-in.
    05  FILLER                          PIC X.
        88  word-in-data-not-left-just  VALUE SPACE.
    05  FILLER                          PIC X(7).

IF word-in-data-not-left-just
    ....
END-IF

定义数据以隔离第一个字节,并在其上使用 88,以便 reader 知道它的含义。

01   word-in.
     05 FILLER                          pic x(01) occurs 8.
        88  word-in-data-not-left-just  VALUE SPACE.

if word-in-data-not-left-just ( 1 ) 
    ....
END-IF

与 Magoo 一样,88 也可以完全按照他们的解决方案进行,但无需为数据命名,只需为 88 命名即可。

01  word-in                             PIC X(8).

IF word-in ( 1 : 1 ) EQUAL TO SPACE
    ....
END-IF

参考修改。遇到的时候打个电话就到办公室了 "what does it mean when the first byte of word-in is space?" 肯定有人知道。如果没有,你会得到额外的乐趣,因为在你知道你是否需要知道之前必须先弄清楚意图。

从以上所有生成的代码将(IBM Enterprise COBOL)/应该是相同的,所以选择哪一个是为了人类理解,编译器不关心。它按照它说的做,即使需要更多的时间来解决它是什么,这取决于解决方案。

您可以使用 INSPECT 语句。对于前导空格,请使用:

01  WS-CNT    PIC S9(5)  COMP-3.

INSPECT WORD-IN TALLYING WS-CNT FOR LEADING SPACES

要计算尾随空格,您可以:

Inspect function reverse(word-in) tallying ws-cnt for leading spaces

变量ws-cnt会有空格数。