1

我有一个 LRECL = 500 和 RECFM=FB 的 PS,在位置 70 到 82 中,我有以下字符格式的金额字段。

  -000000042.99
  -000000001.50
  -000000003.00
  -000000001.50
  -000000042.99
  +000000025.00
  +000000019.52
  +000000058.36

如何将其转换为压缩十进制?我的意图是我需要总结金额字段。有什么想法吗?

我们有 DFSORT。这些金额字段不是压缩十进制或数字格式。此文件来自外部系统,我想通过 JCL 汇总此文件中的所有金额。我必须知道金额。出于显而易见的原因,我不希望将此文件导出到 excel 并在那里找到总数。我不想根据一个键对总数求和。我只想在该列中将该文件中的所有金额相加。

4

2 回答 2

1
//SORTA    EXEC PGM=SORT                             
//SYSOUT   DD SYSOUT=*                               
//SORTOUT  DD SYSOUT=*                               
//SYSIN    DD  *                                     
  OPTION COPY                                        
   OUTFIL  REMOVECC,                                 
            TRAILER1=(TOTAL=(1,13,SFF,               
                              EDIT=(SIIIIIIIIT.TT),  
                              SIGNS=(+,-),           
                              LENGTH=13))            
//SORTIN   DD *                                      
-000000010.10                                        
-000000020.20                                        
+000000005.88                                        

Now I am getting the desired output
-000000010.10 
-000000020.20 
+000000005.88 
       -24.42 
于 2014-10-20T18:32:35.130 回答
0

使用 OUTFIL 及其报告功能是一项简单的任务:

//TOTALREP EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=* 
//SORTOUT  DD SYSOUT=* 
//SYSIN    DD * 
  OPTION COPY 

  OUTFIL  REMOVECC, 
          TRAILER1=(TOTAL=(1,13,SFF, 
                            EDIT=(SIIIIIIIIT.TT), 
                            SIGNS=(+,-), 
                            LENGTH=13)) 
//SORTIN   DD * 
-000000042.99 
-000000001.50 
-000000003.00 
-000000001.50 
-000000042.99 
+000000025.00 
+000000019.52 
+000000058.36 

SORTOUT 包含:

-000000042.99
-000000001.50
-000000003.00
-000000001.50
-000000042.99
+000000025.00
+000000019.52
+000000058.36
        +3.86

REMOVECC 表示不包含打印机控制代码,TRAILER1 在 OUTFIL 组的末尾执行,TOTAL(或 TOT)表示给出位置(此处为 1)长度(13)和类型(FS)的总和(您应该在 DFSORT 应用程序编程指南中查找,对于您的 DFSORT 版本,可以在此处找到:http ://www-01.ibm.com/support/docview.wss?uid=isg3T7000080 。编辑、标志和LENGTH 决定了 TOTAL 值的显示方式。

UFF 是 Unsighed Free Format - 这将去除所有非数字数字并处理结果

SFF 是有符号自由格式 - 这将去除所有非数字数字并根据字段中任何位置的存在来处理结果,这意味着-如果找到一个或多个-位置,则值将为负数,否则为正数。

FS CSF 这两个是同义词,可以处理前导符号,但不能处理小数点。在原始示例中,小数点的存在导致数字仅被视为小数部分。小数点前的所有内容都被忽略,包括符号。

于 2014-10-08T22:30:09.530 回答