2012-02-07 5 views
0

私はクラスのためにこのプログラムを書いています。私はそれが正しいと信じています。しかし、私は入力記録から私のフィールドのいずれかで何もすることができないので、私はそれをテストすることはできません。配列の異なる位置に追加する必要がありますが、間違ったフィールドを使用しているため、「数値フィールドで無効な文字」エラーが発生します。私は入力レコード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. 

答えて

7

私はこの問題は、あなたのすべてのフィールドは、レベル01

は、このような構造で、それを作成してみてください定義されていることだと思います。

FD SALES-AMT-FILE-IN. 
01 SALES-RECORD 
    02 SA-SALESMAN-NUM-IN     PIC 99. 
    02          PIC X  VALUE SPACE. 
    02 MONTH-NUM-IN      PIC 9. 
    02          PIC X  VALUE SPACE. 
    02 SALES-AMT-IN      PIC 9(5). 
+0

それはそれでした。私はそれが私がそれを持っていたように動作しない理由を見ると思う。ありがとう! – Shane

+2

私は '02'の代わりに' 05'を使用します。これは古いプログラマのトリックです。なぜなら、何らかの理由でグループ項目定義を追加する必要がある場合、あなたはインデントのための押さえ人でなければ、それほど努力する必要はありません。 パンチングカードの時代への逆戻りです。 – zarchasmpgmr

+0

私は同意します。私は各レベルで常に奇数を使用していた1つの場所で働いていました。フィールド名を空白のままにするのではなく、空のスペースFILLERという名前を付けました。 – Logan

1

あなたが示したすべての内容に基づいて、不正なデータが必要です。例えば、あなたの "1"は "l"(L)か、あなたの "0"は "O"です。

+0

入力ファイルのPIC句のため、SALES-AMT-INには30 1も含めないでください。それには17960が含まれている必要があります。私は表示節に入れるまで同じことを考えていましたが、私が言っているデータを使っていないことが分かりました。 – Shane

2

ファイルの説明の名前はSALES-AMT-FILE-INREAD SALESAMT-FILE-INです。コードの残りの部分を見ることはできませんが、正しいとは限りません。

+1

投稿時に入力ミスがありました。 – Shane

関連する問題