0

ファイルから読み取った後、2 つの 10 進数を追加することはできません。ファイル内では、数値は 1234.10 として定義されています。プログラムでループしてこれらの数値を追加していますが、3 番目の変数を使用して追加しているときに SOC7 を取得しています。ファイルからの詳細、私はすべての数値変数を 9(4)v99 として定義し、s9(4)v99 comp-3 を使用しようとしましたが、まだ追加していません。

プログラムは、ファイル内の小数がファイル内で 1234.10 ではなく 123410 として定義されている場合にのみ機能します。

これが私がコーディングした方法です、

READ-PARA1.                                               
READ FILEX                                            
  AT END                                              
     MOVE 'Y' TO WS-EOF-IND.                          
READ FILEY                                            
  AT END                                              
     MOVE 'Y' TO WS-EOF-IND.                          
DISPLAY SPACE                                         
DISPLAY OCODE1,'    'ACODE1,'    'POLNO1,' 'EDATE1,   
          ' 'PHOLD1,' 'LOCATION1,' ',LICNO1,' 'VMAKE1,
' 'VMODEL,' 'YEAR,' 'PREM'  '.                        
ADD 1 TO R1.                                          
MOVE PREM TO PRESUM1.                                 
ADD PRESUM1 TO PRESUM.                                

その上のファイル記述子を含む作業領域セクションで、

  05 PREM PIC S9(4)V99 COMP-3.                
  05 FILLER PIC X(34).                        
  WORKING-STORAGE SECTION.                        
  77  R1 PIC 9(2) VALUE 0.                        
  77  PRESUM PIC S9(4)V99 COMP-3 VALUE 0.         
  77  PRESUM1 PIC S9(4)V99 COMP-3 VALUE 0.        
  77  PRESUM2 PIC S9(4)V99 COMP-3 VALUE 0.        
4

4 に答える 4

1

Bruce Martinによる回答は機能しますが、入力ファイルで「数値」をPIC X何かとして定義し、それを使用NUMVALして数値に変換することもできます。何かのようなもの:

01  FILEX-REC.
    02 ....
    02 PREM    PIC X(7).
    02 ...

01.
    02 PRESUM1     PIC S9(4)V99 PACKED-DECIMAL.

    COMPUTE PRESUM1 = FUNCTION NUMVAL(PREM) END-COMPUTE

このNUMVAL関数は、文字列(PIC X)を受け取り、それを数値データ項目に変換します。これにより、の数値の文字表現がのPREMパック10進数(COMP-3)に変換されPRESUM1ます。

ちなみに...すべての新しいCOBOLプログラマーはこの小さな問題に遭遇し、通常はそれを整理するのに時間がかかります。

于 2012-07-19T16:56:12.290 に答える
0

1234.56 のような数値は、次のように定義する必要があります。

     05  PREM                   PIC 9999.99.

実際の小数点が埋め込まれた文字形式の数値を期待するようにコンパイラに指示する必要があります。

于 2012-07-20T03:16:01.177 に答える
0

S0C7 はデータ例外エラーです。パック フィールド内のデータがパック形式でない場合、またはゾーン フィールド内のデータがゾーン形式でない場合、このエラーが発生します。ありがたいことに、S0C7 はそれほど有害ではないので (COBOL ではまれな S0C1 や S0C4 のように、神に感謝します)、それらを突き止めるのはそれほど難しくありません。

ファイルから PRESUM と PRESUM1 の値を読み取っていると思いますか? ファイルには何がありますか?

面白いことに、COMP-3 またはゾーン化されたフィールドは、追加するか他のものに追加するなど、使用しようとするまで、無効なデータについて文句を言わないことがよくあります。

COMP-3 パック フィールドを構成するバイト (値ではなく BYTES) を知らなければ、この S0C7 を診断する方法はありません。

あなたや他の誰かがゾーン データまたはパック データについてさらに詳しい情報を必要としている場合は、たくさんの情報を提供できます。

于 2012-07-20T11:15:04.930 に答える