重新回答。儘管提到了「字符串」,但我認爲你正在談論什麼可能被稱爲「字段」,即一段數據。
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