2017-07-07 111 views
1

在具有看起來有點像這樣的打印機文件:誰能告訴我這個RPGLE陣列有什麼問題?

Customer-data     Units01 Units02 ....... Units11 
------------------------------------------------------------- 
Name/address/zip/....   Count01 Count02 ....... Count11 
Name/address/zip/....   Count01 Count02 ....... Count11 
: :  : :   :  :  :  : 
Name/address/zip/....   Count01 Count02 ....... Count11 
           ------- ------- ------- ------- 
Totals      Total01 Total02 ....... Total11 

單位,計數和總計字段被映射到與陣列定義像這樣的疊加的數據結構:

0014.00 D UNITSDS   DS 
0015.00 D UNITS01 
0016.00 D UNITS02 
:  : : 
0024.00 D UNITS10 
0025.00 D UNITS11 
0026.00 D UNITSAR       LIKE(UNITS) DIM(11) 
0026.00 D          OVERLAY(UNITSDS) 
:  D*------------------------------------------------------- 
0034.00 D COUNTDS   DS 
0035.00 D COUNT01 
0036.00 D COUNT02 
:  : : 
0044.00 D COUNT10 
0045.00 D COUNT11 
0046.00 D COUNTAR       LIKE(COUNT) DIM(11) 
0046.00 D          OVERLAY(COUNTDS) 
:  D*------------------------------------------------------- 
0054.00 D TOTALDS   DS 
0055.00 D TOTAL01 
0056.00 D TOTAL02 
:  : : 
0064.00 D TOTAL10 
0065.00 D TOTAL11 
0066.00 D TOTALAR       LIKE(TOTAL) DIM(11) 
0066.00 D          OVERLAY(TOTALDS) 

當我處理經過一些處理之後,在打印機文件的詳細信息行上進行了寫入,出現「十進制數據錯誤」。

我很驚訝,雖然所有先前定義的變量COUNT,COUNTnn,TOTAL和TOTALnn都是「分區的」,而數據結構COUNTDS和TOTALDS是「Char」,但COUNTAR和TOTALAR數組看起來數據類型爲「Packed」 」。

將打包數據映射到打印機文件的輸出緩衝區中,導致「十進制數據錯誤」。

爲什麼這些數組突然處於「Packed」數據格式?

+0

我想這個代碼。我敢打賭,總數和數量的定義與您所說的不同。 like(units01)dim(11) like(counts01)dim(11) like(total01)dim(11) – danny117

回答

0

數據結構始終爲字符,因爲RPG不具有BYTE數據類型。

你似乎並沒有在這裏定義子域,所以他們必須從其他地方挑選它的大小和類型。可能是打印機文件。打印機文件可能更改了嗎?

我懷疑這不是一個分區vs打包問題。但是需要從編譯列表中看到其餘的定義和交叉引用,才能真正知道發生了什麼。

相反,這可能是由於DS未初始化的事實。

manual

當未指定的INZ參數:
- 靜態獨立字段和初始化的數據結構的子場被初始化爲它們RPG默認初始值( 例如,對於字符的空格, 0表示數字)。
- 初始化數據結構的子字段(在數據結構的定義規範中沒有指定INZ)被初始化爲 以空白(不管它們的數據類型如何)。

由於DS上沒有INZ關鍵字,因此它們被視爲未初始化,並且DS的所有子字段都設置爲空白。哪些或課程不是有效的數字。

如果報告正常運行正常,並在所有11列中打印數據。如果您嘗試運行報告的方式不是全部11個子字段都被加載,那麼您現在可能會看到一個錯誤;從而留下一些空白。當系統嘗試將數據移動到打印機文件的輸出緩衝區時,會出現小數數據錯誤。

總之,將INZ關鍵字添加到您的DS。

D COUNTDS   DS     INZ 
0

我想這個代碼

0014.00 D UNITSDS   DS 
0015.00 D UNITS01 
0016.00 D UNITS02 
:  : : 
0024.00 D UNITS10 
0025.00 D UNITS11 
0026.00 D UNITSAR       LIKE(UNITS01) DIM(11) 
0026.00 D          OVERLAY(UNITSDS) 
:  D*------------------------------------------------------- 
0034.00 D COUNTDS   DS 
0035.00 D COUNT01 
0036.00 D COUNT02 
:  : : 
0044.00 D COUNT10 
0045.00 D COUNT11 
0046.00 D COUNTAR       LIKE(COUNT01) DIM(11) 
0046.00 D          OVERLAY(COUNTDS) 
:  D*------------------------------------------------------- 
0054.00 D TOTALDS   DS 
0055.00 D TOTAL01 
0056.00 D TOTAL02 
:  : : 
0064.00 D TOTAL10 
0065.00 D TOTAL11 
0066.00 D TOTALAR       LIKE(TOTAL01) DIM(11) 
0066.00 D          OVERLAY(TOTALDS) 
相關問題