1

私は COBOL を初めて使用します。最新のトレーニング アクティビティでは、次のような 3 つの項目の出力を取得しようとします。

  1. 0000/2013
  2. 00012345
  3. 12345**

以下のコードを試してみましたが、明らかに必要な出力が得られません。ゼロは表示されません。

IDENTIFICATION DIVISION.

PROGRAM-ID. ACTIVITY4.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 NUM1 PIC z(4)9(4) VALUE 2013.
01 NUM2 PIC Z(3)9(5) VALUE 12345.
01 NUM3 PIC 9(5) VALUE 12345.
01 E-NUM1 PIC *(2)9 VALUE 0.

PROCEDURE DIVISION.

DISPLAY-VALUES.

DISPLAY-ZEROES.

MOVE E-NUM1 TO NUM3.

 DISPLAY "1) "NUM1.

 DISPLAY "2) "NUM2.

 DISPLAY "3) "NUM3.

 STOP RUN.
4

3 に答える 3

2

アクティビティ 4 は、出力用にデータをフォーマットすることに関するものだと思います。以下を生成する必要があります。

0000/2013
00012345
12345**

1 つ目は、スラッシュを挿入する必要があります。COBOL にはスラッシュ挿入記号「/」があります。2 つ目は、PIC 9(n) フィールドが出力されるときの動作であるゼロ抑制を確実に行わないようにすることです。そのため、長さを正しくする以外に何もする必要はありません。3 番目は明らかに「*」置換編集フィールドに引き寄せられます。これは私が推測する質問の意図ですが、* 編集記号は先頭のゼロのみを置き換えます。

末尾のアスタリスクを取得する簡単な方法の 1 つは、data-definition を使用することです。表示するグループ アイテムを定義します。それに従属して、番号 (PIC 9(5)) を定義し、すぐに FILLER (必要に応じて名前付きフィールド) PIC XX を続けます。これには、値"**"(または ALL "*"、2 バイト フィールドの場合は少し極端ですが) があります。 .

IDENTIFICATION DIVISION.

PROGRAM-ID. ACTIVITY4.

ENVIRONMENT DIVISION.

DATA DIVISION.

WORKING-STORAGE SECTION.

01 NUM1 PIC 9(4)/9(4).
01 NUM2 PIC 9(8).
01 NUM3-OUT. 
    05  NUM3 PIC 9(5). 
    05  FILLER PIC XX VALUE "**".

手続き部。

DISPLAY-VALUES.

DISPLAY-ZEROES.
 MOVE 1234 TO NUM1

 DISPLAY "1) " 
             ">"
             NUM1
             "<"
 MOVE 12345 TO NUM2

 DISPLAY "2) "
             ">"
             NUM2
             "<"
 MOVE 12345 TO NUM3
 DISPLAY "3) "
             ">"
             NUM3-OUT
             "<"

 STOP RUN
 .

編集済みフィールドに値を設定したことはありません。編集は、フィールドが COBOL 動詞のターゲットである場合に実行されます。私が使用する COBOL では、これは編集には影響せず、そのリテラル値を持つだけです。GNU OpenCOBOL (以前の OpenCOBOL) については知りません。

于 2013-10-21T08:22:05.103 に答える
0

数字を宣言するときに Z を削除します。

Z は、COBOL の数値の先行ゼロを抑制します。

変数宣言を次のように変更するだけです。

01 NUM1 PIC 9(8) VALUE 00002013.
01 NUM2 PIC 9(8) VALUE 00012345.

(数字の前のゼロは実際には必要ありません。PIC 全体を表示するためのものです。)

ピクチャ ステートメントの詳細な説明と、さまざまな文字修飾子とその機能の簡単な概要については、こちらを参照してください。

最初は他の問題をキャッチできませんでしたが、作成した他の変数は

01 E-NUM1 PIC 9(2) VALUE 0.
于 2013-10-21T06:42:53.730 に答える