有一个看起来像这样的打印机文件:
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)
经过一些处理后,当我在打印机文件的详细信息行上处理WRITE时,出现“十进制数据错误”。
我非常惊讶看到数组COUNTAR和TOTALAR的数据类型为“Packed”,尽管所有先前定义的变量COUNT,COUNTnn,TOTAL和TOTALnn都是“Zoned”且数据结构COUNTDS和TOTALDS是“Char”
打包数据已映射到打印机文件的输出缓冲区中,导致“十进制数据错误”。
为什么这些数组突然处于“Packed”数据格式?
答案 0 :(得分:0)
数据结构始终都是字符,因为RPG没有BYTE数据类型。
您似乎没有在这里定义子字段,因此他们必须从其他地方获取大小和类型。可能,打印机文件。打印机文件可能已更改吗?
我怀疑这不是一个分区vs包装问题。但是需要查看其余的定义以及编译列表中的交叉引用,才能真正了解正在发生的事情。
相反,这可能是由于DS未初始化的原因。
来自manual
未指定INZ参数时:
- 初始化数据结构的静态独立字段和子字段初始化为其RPG默认初始值(for 例如,字符为空格,数字为0) - 初始化未初始化数据结构的子字段(未在数据结构的定义规范中指定的INZ) 空白(无论数据类型如何)。
由于您的DS上没有INZ
关键字,因此它们被视为未初始化,并且您的DS的所有子字段都设置为空白。哪个或当然不是有效数字。
如果报告正常运行正常,则在所有11列中打印数据。如果您尝试以不加载所有11个子字段的方式运行报告,您现在可能会看到错误;因此留下一些空白。当系统尝试将数据移动到打印机文件的输出缓冲区时,会出现十进制数据错误。
简而言之,请将INZ
关键字添加到您的DS中。
D COUNTDS DS INZ
答案 1 :(得分: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)