私はクラスのためにこのプログラムを書いています。私はそれが正しいと信じています。しかし、私は入力記録から私のフィールドのいずれかで何もすることができないので、私はそれをテストすることはできません。配列の異なる位置に追加する必要がありますが、間違ったフィールドを使用しているため、「数値フィールドで無効な文字」エラーが発生します。私は入力レコードPIC句も正しいです。入力ファイルがコード化されていますCOBOL ADD文がレコードの正しいフィールドを使用していませんか?
FD SALES-AMT-FILE-IN.
01 SA-SALESMAN-NUM-IN PIC 99.
01 PIC X VALUE SPACE.
01 MONTH-NUM-IN PIC 9.
01 PIC X VALUE SPACE.
01 SALES-AMT-IN PIC 9(5).
販売AMT-FILE-INを正確に私はそれを複数回チェックし、各レコードをチェックしたことのようにレイアウトされています。私はエラーを取得しているコードのセクションは次のとおりです。
440-READ-SALES-AMT-FILE.
MOVE 'YES' TO ARE-THERE-MORE-RECORDS
PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'
READ SALESAMT-FILE-IN
AT END
MOVE 'NO' TO ARE-THERE-MORE-RECORDS
NOT AT END
DISPLAY SALES-AMT-IN *I coded this in to check what was in SALES-AMT-IN
ADD SALES-AMT-IN TO A-AMT (MONTH-NUM-IN, SA-SALESMAN-NUM-IN)
END-READ
END-PERFORM.
入力ファイルの最初のレコードは、このようなものです:
30 1
:表示文は私を与えている
30 1 17960
PICが正しく定義されていると、間違ったデータがそこに書き込まれる理由を理解できません。誰でも私が間違っていることを見ることができます。必要に応じてコード全体を投稿します。
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 PAGE-CTR PIC 99 VALUE ZERO.
01 NUMBER-OF-LINES PIC 99 VALUE ZERO.
01 QTR-NUM PIC 9.
01 NAME-SUB PIC 9(3) VALUE 1.
01 NUM-SUB PIC 9(3) VALUE 1.
01 SALESMAN-NUM PIC 999.
01 SALESMAN-TOTAL PIC 9(6).
01 WS-DATE.
05 RUN-YEAR PIC XX.
05 RUN-MONTH PIC XX.
05 RUN-DAY PIC XX.
01 HEADING-LINE-1.
05 PIC X(17) VALUE SPACES.
05 PIC X(35)
VALUE 'SALES AMOUNTS BY SALESMAN AND MONTH'.
05 PIC X(6) VALUE SPACES.
05 HL-DATE.
10 MONTH-HL PIC XX.
10 PIC X VALUE '/'.
10 DAY-HL PIC XX.
10 PIC X VALUE '/'.
10 YEAR-HL PIC XX.
05 PIC X(3) VALUE SPACES.
05 PIC X(5) VALUE 'PAGE'.
05 PAGE-NUMBER-HL PIC Z9.
01 HEADING-LINE-2.
05 PIC X(29)
VALUE 'NUM NAME'.
05 THREE-MONTH-NAMES.
10 MONTH-1-HL PIC X(11).
10 MONTH-2-HL PIC X(11).
10 MONTH-3-HL PIC X(11).
05 PIC X(5) VALUE 'TOTAL'.
01 DETAIL-LINE.
05 SALESMAN-NUMBER-DL PIC ZZZ.
05 PIC XX VALUE SPACES.
05 SALESMAN-NAME-DL PIC X(20).
05 MONTH-1-AMT-DL PIC ZZZ,ZZZ.
05 PIC X(4) VALUE SPACES.
05 MONTH-2-AMT-DL PIC ZZZ,ZZZ.
05 PIC X(4) VALUE SPACES.
05 MONTH-3-AMT-DL PIC ZZZ,ZZZ.
05 PIC XX VALUE SPACES.
05 AMOUNT-TOTAL-DL PIC Z,ZZZ,ZZZ.
01 SALESMAN-TABLE VALUE ZEROS.
05 ENTRIES OCCURS 99 TIMES INDEXED BY X1.
10 T-SALESMAN-NUM PIC 99.
10 T-SALESMAN-NAME PIC X(20).
01 SALES-ARRAY.
05 A-SALESMAN-NUM OCCURS 99.
10 A-MONTH OCCURS 3.
15 A-AMT PIC 9(6) VALUE ZEROS.
それはそれでした。私はそれが私がそれを持っていたように動作しない理由を見ると思う。ありがとう! – Shane
私は '02'の代わりに' 05'を使用します。これは古いプログラマのトリックです。なぜなら、何らかの理由でグループ項目定義を追加する必要がある場合、あなたはインデントのための押さえ人でなければ、それほど努力する必要はありません。 パンチングカードの時代への逆戻りです。 – zarchasmpgmr
私は同意します。私は各レベルで常に奇数を使用していた1つの場所で働いていました。フィールド名を空白のままにするのではなく、空のスペースFILLERという名前を付けました。 – Logan