重新回答。尽管提到了“字符串”,但我认为您是在谈论可能被称为“字段”的内容,即一段数据。
01 a-piece-of-data.
05 first-two-bytes-of-data PIC XX.
05 third-byte-of-data PIC X.
05 fourth-byte-of-data PIC X.
a-piece-of-data 是一个“组项”,它有四个字节长。 “从属”定义允许您访问四个字节中的各个字节。
可以这样:
01 a-piece-of-data PIC X(4).
01 FILLER REDEFINES a-piece-of-data.
05 first-two-bytes-of-data PIC XX.
05 third-byte-of-data PIC X.
05 fourth-byte-of-data PIC X.
可以通过“下标”来完成:
01 a-piece-of-data.
05 FILLER OCCURS 4 TIMES.
10 a-byte-in-the-piece-of-data PIC X.
现在,
a-byte-in-the-piece-of-data ( 3 )
引用数据的第三个字节。
下标可以使用如图所示的文字或数据名称(您以正常方式定义的名称和存储,必须是数字,最好是二进制)或索引名称(使用 INDEXED BY,您在其中定义名称,但编译器定义存储)。
也可以通过参考修改来完成,如 NealB 所示。
对我来说,选择通常归结为“下一个人最清楚哪个?”。
01 WHAREHOUSE-REF.
05 WHAREHOUSE-CODE PIC XX.
88 WHAREHOUSE-HAS-LIFT VALUE "LN" "CV".
05 WHAREHOUSE-FLOOR PIC X.
88 WHAREHOUSE-UPPER-FLOOR VALUE "1" "2".
05 WHAREHOUSE-BAY PIC X.
01 W-LIFT-USAGE PIC X.
88 W-LIFT-USAGE-NONE VALUE ZERO.
IF WHAREHOUSE-HAS-LIFT
AND WHAREHOUSE-UPPER-FLOOR
MOVE WHAREHOUSE-FLOOR TO W-LIFT-USAGE
ELSE
SET W-LIFT-USAGE-NONE TO TRUE
END-IF
PERFORM CALC-ROBOT-TIME-TO-BAY
与(或者是吗?,您每次都可以随时查看手册):
01 VAR1 PIC X(4).
01 VAR2 PIC X.
IF VAR1 (1:2) = "LN" OR "CV"
AND VAR1 (3:1) = "1" OR "2"
MOVE VAR1 (3:1) TO VAR2 (1:1)
ELSE
MOVE ZERO TO VAR2 (1:1)
END-IF
PERFORM CALC-ROUTINE THROUGH CALC-ROUTINE-EXIT
PS。我知道 VAR2,但根据我的经验,有多少没有使用参考修改经验的人会编写它。您还会看到 VAR2 (1:),而只需要一个普通的 VAR2。是的,所选择的名称类型似乎与参考修改密切相关且没有经验。