重新回答。尽管提到了“字符串”,但我认为你正在谈论什么可能被称为“字段”,即一段数据。
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就是需要的。是的,选择的名字是类似的名字,似乎与参考修改并没有经验并驾齐驱。
向我们展示了程序部和数据部门的相关代码。 – RBarryYoung 2013-05-08 14:02:05
当你说特定的角色时,你的意思是角色位置还是匹配角色?换句话说,如果字符串是“work”,你想让“w”返回1,还是你想让1返回“w”? – 2013-05-08 14:08:09