たとえば、文字列が「work」の場合、3 番目の文字にアクセスして保存する必要があります。Cでは次のようにします:
char data[5] = "work";
char temp = data[2];
変数temp
の値は になります'r'
。ここで、COBOL で同等の機能を実現する必要があります。
再回答。「文字列」に言及しているにもかかわらず、「フィールド」と呼ばれるもの、データの一部について話していると思います。
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 は、4 バイト長の「グループ項目」です。「従属」定義により、4 バイト内の個々のバイトにアクセスできます。
次の方法で実行できます。
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 )
データの 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 だけで十分です。はい、選択された名前は、参照変更および経験なしと密接に関連しているように見える名前のタイプです。