1

たとえば、文字列が「work」の場合、3 番目の文字にアクセスして保存する必要があります。Cでは次のようにします:

char data[5] = "work";
char temp = data[2];

変数tempの値は になります'r'。ここで、COBOL で同等の機能を実現する必要があります。

4

2 に答える 2

3

再回答。「文字列」に言及しているにもかかわらず、「フィールド」と呼ばれるもの、データの一部について話していると思います。

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 だけで十分です。はい、選択された名前は、参照変更および経験なしと密接に関連しているように見える名前のタイプです。

于 2013-05-08T22:39:24.177 に答える