2

COBOLで何かを行う方法を考えています。ifステートメントを使用してデータファイルから一致するデータレコードを出力するプログラムを作成しようとしています。しかし、私はまだこのようにそれをしていませんが、私がする必要があるのは、さまざまなデータ型のコードを作成することです。

blue = 1
brown = 2

だから私はこのように試しましたが、うまくいきませんでした。これは私がマスターレコードで宣言しました:

01  COLOR-IN    PIC (9)
    05    BLUE         VALUE 1.
    05    BROWN        VALUE 2.

次に、次のようなifステートメントを記述できると考えました。

IF COLOR-IN = BLUE 
   PERFORM 200-OUTPUT.

だから私が求めているのは、色を数値またはアルファベットのコードと等しくする方法です。どんな声明を書けばいいのか。

私はそれを考え出した。私は88のステートメントを使用しました。このような

88      MALE     VALUE 'M'.

しかし、私には別の問題があります。出力には「if」ステートメントの条件を満たすレコードがリストされますが、プログラムの実行時に1または2ではなく髪と目の色が出力されるように、実際の髪と目の色をプログラムにコーディングする必要があります。誰かが私にそれを行う方法の例やヒントを教えてくれますか?

4

1 に答える 1

4

88秒について学ぶための+1。それらは非常に便利です。

あなたの値に対応するラベルのテーブル(配列)はあなたが探しているものです。88 MALE VALUE'M'の場合のようにアルファベットコードを使用する場合、テーブルには値とラベルのエントリがあります。

01  INPUT-VALUE                 PIC X(1).
    88  MALE                    VALUE "M".
    88  FEMALE                  VALUE "F".

01  LABELS-AND-VALUES-AREA.
    05  LABELS-AND-VALUES.
        07  ONE-LABEL-AND-VALUE OCCURS 2.
            09  ONE-LABEL       PIC X(6).
            09  ONE-VALUE       PIC X(1).
    05      FILLER REDEFINES LABELS-AND-VALUES
                                VALUE "MALE  MFEMALEF".
01  I                           PIC S9(4) COMP.
01  DISPLAY-LABEL               PIC x(6).

    MOVE "?" TO DISPLAY-LABEL
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
        IF INPUT-VALUE = ONE-VALUE(I)
            MOVE ONE-LABEL(I) TO DISPLAY-LABEL
        END-IF
    END-PERFORM 

入力値に数値を使用する場合は、ルックアップをスキップして、目的のラベルに直接移動できます。

01  INPUT-VALUE                 PIC 9(1).
    88  MALE                    VALUE "1".
    88  FEMALE                  VALUE "2".
    88  VALID-INPUT             VALUE "1", "2".

01  LABELS-AND-VALUES-AREA.
    05  LABELS-AND-VALUES.
        07  ONE-LABEL-AND-VALUE OCCURS 2.
            09  ONE-LABEL       PIC X(6).
    05      FILLER REDEFINES LABELS-AND-VALUES
                                VALUE "MALE  FEMALE".
01  DISPLAY-LABEL               PIC x(6).

   IF VALID-INPUT
       MOVE ONE-LABEL(INPUT-VALUE) TO DISPLAY-LABEL
   ELSE
       MOVE "?" TO DISPLAY-LABEL
   END-IF

この場合、欠落している/不明なデータのコードを追加することをお勧めします。

アップデート

欠落/不明なデータを処理するためのコードを追加しました。

于 2012-05-18T12:43:48.990 に答える