Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 根据JCL中特定字段的值为该字段添加前面的零_Sorting_Jcl - Fatal编程技术网

Sorting 根据JCL中特定字段的值为该字段添加前面的零

Sorting 根据JCL中特定字段的值为该字段添加前面的零,sorting,jcl,Sorting,Jcl,我已经尝试将前面的零添加到JCL中的字段中 但我尝试的所有想法都不符合我的要求。 我的要求是仅当字段为数字且 仅当字段前面有空格时 输入 预期输出: 我已经尝试了几种方法,但不符合我的要求。 我已经查看了该查询,但它不适用于我的情况 下面是我试过的 方法1 //STEP0001 EXEC PGM=SORT //SYSOUT DD SYSOUT=*

我已经尝试将前面的零添加到JCL中的字段中 但我尝试的所有想法都不符合我的要求。 我的要求是仅当字段为数字且 仅当字段前面有空格时

输入

预期输出:

我已经尝试了几种方法,但不符合我的要求。
我已经查看了该查询,但它不适用于我的情况

下面是我试过的

方法1

//STEP0001 EXEC PGM=SORT                                       
//SYSOUT   DD SYSOUT=*                                         
//SYMNAMES DD *                                                
ALPHA,C'A, ,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z' 
//SORTIN   DD *                                                
123457 0                                                       
34567R                                                         
997654D3                                                       
    45833                                                      
23                                                             
//SORTOUT  DD SYSOUT=*                                         
//SYSIN    DD *                                                    
  SORT FIELDS=COPY                                                 
  INREC IFTHEN=(WHEN=(01,01,SS,EQ,ALPHA,OR,02,01,SS,EQ,ALPHA,OR,   
                      03,01,SS,EQ,ALPHA,OR,04,01,SS,EQ,ALPHA,OR,   
                      05,01,SS,EQ,ALPHA,OR,06,01,SS,EQ,ALPHA,OR,   
                      07,01,SS,EQ,ALPHA,OR,08,01,SS,EQ,ALPHA,OR,   
                      09,01,SS,EQ,ALPHA,OR,10,01,SS,EQ,ALPHA),     
  BUILD=(1,10)),                                                   
  IFTHEN=(WHEN=NONE,BUILD=(1,10,UFF,M11,LENGTH=10))                
//           
方法2

//STEP0001 EXEC PGM=SORT                                               
//SYSOUT   DD SYSOUT=*                                                 
//SORTIN   DD *                                                        
123457   0                                                             
34567                                                                  
997654                                                                 
4568 F ABC                                                             
23 1     1                                                             
//SORTOUT  DD SYSOUT=*                                                 
//SYSIN    DD *                                                        
  SORT FIELDS=COPY                                                     
  INREC IFOUTLEN=50,IFTHEN=(WHEN=INIT,OVERLAY=(51:1,10,TRAN=ALTSEQ)),  
  IFTHEN=(WHEN=(51,10,FS,EQ,NUM),OVERLAY=(1:1,10,UFF,M11,LENGTH=10))   
  ALTSEQ CODE=(40F0)                                                   
/*    
方法3

//STEP001  EXEC PGM=SORT                      
//SORTIN DD *                                 
764536 27                                     
0097865432                                    
00065499234                                   
00012342345                                   
12301231233                                   
//SORTOUT DD SYSOUT=*                         
//SYSIN DD *                                  
  OPTION COPY                                 
  INREC BUILD=(1,11,UFF,M11,LENGTH=11)        
//
注意:
-如果我们能在ICETOOL中完成它会更好

-其他排序方法也不错。

这里有一个使用SYNCSORT的可能解决方案。它也可以与DFSORT一起使用

解决方案修改为检查包含非数字字符或嵌入空格的值

该示例演示了第1-5列中包含的数字字段

“数字”仅指数字0-9。处理符号(+/-)或小数点显然会更复杂

此外,所需的大量控制语句使得此解决方案对于非常长的字段或大量字段来说不切实际

如果您可以使用的话,一个更好的选择是编写一个排序退出例程来执行数据验证和零填充

此解决方案的工作原理如下:

初始生成将创建一个临时记录,其中包含:

第1-5列:数据字段

cols6-10:数据字段的副本,将用前导零填充

第11列:指示数据字段是有效数字(空白)还是无效('I')的标志

第12列:跟踪数据字段状态的标志,在处理每个字符时更新。(空白)=处理的所有字符均为空白;('N')=已处理非空白字符;('B')=已处理非空字符后的尾随空格

对于数据字段中的每个字符,在测试时有五个I:

(1) 如果字符既不是空白也不是数字,则无效标志(第11列)设置为“I”

(2) 如果字符为非空,且之前处理的所有字符均为空,则状态标志(第12列)设置为“N”

(3) 如果字符为空,并且已处理非空字符,则状态标志(第12列)设置为“B”

(4) 如果字符为非空白字符,并且已处理尾随空白字符,则无效标志(第11列)将设置为“I”(因为数据字段包含嵌入的空白)

(5)如果字符是非空的,并且所有先前处理的字符都是空的,则数据副本(COLS 6—10)中的空白用0。 处理完所有字符后:

如果该字段为无效数字数据或空白,则使用原始数据(cols 1-5)生成输出记录

否则,输出记录将使用已填充前导零(cols 6-10)的数据构建

输出:

00001
0001 
001  
01   
1    
00012
0012 
012  
12   
00123
0123 
123  
01234
1234 
12345

1 2  
 1 2 
  1 2
1 23 
 1 23
12 3 
 12 3
    X
   X 
  X  
 X   
X    
   1X
  X1 
 1X  
1X   
  12X
 12X 
1X3  
 12X4
X234 
12X45

我已经用SORT找到了这个问题的答案

OPTION COPY                                                         
INREC IFTHEN=(WHEN=(13,12,CH,EQ,C' '),OVERLAY=(13:C'000000000000')),
      IFTHEN=(WHEN=(13,11,CH,EQ,C' '),OVERLAY=(13:C'00000000000')), 
      IFTHEN=(WHEN=(13,10,CH,EQ,C' '),OVERLAY=(13:C'0000000000')),  
      IFTHEN=(WHEN=(13,09,CH,EQ,C' '),OVERLAY=(13:C'000000000')),   
      IFTHEN=(WHEN=(13,08,CH,EQ,C' '),OVERLAY=(13:C'00000000')),    
      IFTHEN=(WHEN=(13,07,CH,EQ,C' '),OVERLAY=(13:C'0000000')),     
      IFTHEN=(WHEN=(13,06,CH,EQ,C' '),OVERLAY=(13:C'000000')),      
      IFTHEN=(WHEN=(13,05,CH,EQ,C' '),OVERLAY=(13:C'00000')),       
      IFTHEN=(WHEN=(13,04,CH,EQ,C' '),OVERLAY=(13:C'0000')),        
      IFTHEN=(WHEN=(13,03,CH,EQ,C' '),OVERLAY=(13:C'000')),         
      IFTHEN=(WHEN=(13,02,CH,EQ,C' '),OVERLAY=(13:C'00')),          
      IFTHEN=(WHEN=(13,01,CH,EQ,C' '),OVERLAY=(13:C'0'))            

如何检查字段是否为数字?我看到您正在寻找空格并将其替换为0,但我看不到您在哪里检查输入是否为数字您是对的;我错过了那个要求。解决方案已更新。谢谢谢谢你们的帮助。但这不会检查输入是否为数字,这是您原始问题的要求。是的,它不会验证输入是否为数字。但它是按照我的预期工作的。您可能应该编辑问题以删除该限制。
//STEP1   EXEC PGM=SYNCSORT                                             
//SYSOUT   DD  SYSOUT=*                                                 
//SORTIN   DD  *                                                        
    1                                                                   
   1                                                                    
  1                                                                     
 1                                                                      
1                                                                       
   12                                                                   
  12                                                                    
 12                                                                     
12                                                                      
  123                                                                   
 123                                                                    
123                                                                     
 1234                                                                   
1234                                                                    
12345                                                                   

1 2                                                                     
 1 2                                                                    
  1 2                                                                   
1 23                                                                    
 1 23                                                                   
12 3                                                                    
 12 3                                                                   
    X                                                                   
   X                                                                    
  X                                                                     
 X                                                                      
X                                                                       
   1X                                                                   
  X1                                                                    
 1X                                                                     
1X                                                                      
  12X                                                                   
 12X                                                                    
1X3                                                                     
 12X4                                                                   
X234                                                                    
12X45                                                                   
/*                                                                      
//SORTOUT  DD  SYSOUT=*                                                 
//SYSIN    DD  *                                                        
 SORT FIELDS=COPY                                                       
 INREC IFTHEN=(WHEN=INIT,                                               
       BUILD=(1,5,1,5,C'  ')),                                          
         IFTHEN=(WHEN=(1,1,CH,NE,C' ',AND,1,1,FS,NE,NUM),               
          OVERLAY=(11:C'I'),                                            
                   HIT=NEXT),                                           
           IFTHEN=(WHEN=(1,1,CH,NE,C' ',AND,12,1,CH,EQ,C' '),           
            OVERLAY=(12:C'N'),                                          
                     HIT=NEXT),                                         
             IFTHEN=(WHEN=(1,1,CH,EQ,C' ',AND,12,1,CH,EQ,C'N'),         
              OVERLAY=(12:C'B'),                                        
                       HIT=NEXT),                                       
               IFTHEN=(WHEN=(1,1,CH,NE,C' ',AND,12,1,CH,EQ,C'B'),       
                OVERLAY=(11:C'I'),                                      
                         HIT=NEXT),                                     
                 IFTHEN=(WHEN=(1,1,CH,EQ,C' ',AND,12,1,CH,EQ,C' '),     
                  OVERLAY=(6:C'0'),                                     
                           HIT=NEXT),                                   
         IFTHEN=(WHEN=(2,1,CH,NE,C' ',AND,2,1,FS,NE,NUM),               
          OVERLAY=(11:C'I'),                                            
                   HIT=NEXT),                                           
           IFTHEN=(WHEN=(2,1,CH,NE,C' ',AND,12,1,CH,EQ,C' '),           
            OVERLAY=(12:C'N'),                                          
                     HIT=NEXT),                                         
             IFTHEN=(WHEN=(2,1,CH,EQ,C' ',AND,12,1,CH,EQ,C'N'),         
              OVERLAY=(12:C'B'),                                        
                       HIT=NEXT),                                       
               IFTHEN=(WHEN=(2,1,CH,NE,C' ',AND,12,1,CH,EQ,C'B'),       
                OVERLAY=(11:C'I'),                                      
                         HIT=NEXT),                                     
                 IFTHEN=(WHEN=(2,1,CH,EQ,C' ',AND,12,1,CH,EQ,C' '),     
                  OVERLAY=(7:C'0'),                                     
                           HIT=NEXT),                                   
         IFTHEN=(WHEN=(3,1,CH,NE,C' ',AND,3,1,FS,NE,NUM),               
          OVERLAY=(11:C'I'),                                            
                   HIT=NEXT),                                           
           IFTHEN=(WHEN=(3,1,CH,NE,C' ',AND,12,1,CH,EQ,C' '),           
            OVERLAY=(12:C'N'),                                          
                     HIT=NEXT),                                         
             IFTHEN=(WHEN=(3,1,CH,EQ,C' ',AND,12,1,CH,EQ,C'N'),         
              OVERLAY=(12:C'B'),                                        
                       HIT=NEXT),                                       
               IFTHEN=(WHEN=(3,1,CH,NE,C' ',AND,12,1,CH,EQ,C'B'),       
                OVERLAY=(11:C'I'),                                      
                         HIT=NEXT),                                     
                 IFTHEN=(WHEN=(3,1,CH,EQ,C' ',AND,12,1,CH,EQ,C' '),     
                  OVERLAY=(8:C'0'),                                     
                           HIT=NEXT),                                   
         IFTHEN=(WHEN=(4,1,CH,NE,C' ',AND,4,1,FS,NE,NUM),               
          OVERLAY=(11:C'I'),                                            
                   HIT=NEXT),                                           
           IFTHEN=(WHEN=(4,1,CH,NE,C' ',AND,12,1,CH,EQ,C' '),           
            OVERLAY=(12:C'N'),                                          
                     HIT=NEXT),                                         
             IFTHEN=(WHEN=(4,1,CH,EQ,C' ',AND,12,1,CH,EQ,C'N'),         
              OVERLAY=(12:C'B'),                                        
                       HIT=NEXT),                                       
               IFTHEN=(WHEN=(4,1,CH,NE,C' ',AND,12,1,CH,EQ,C'B'),       
                OVERLAY=(11:C'I'),                                      
                         HIT=NEXT),                                     
                 IFTHEN=(WHEN=(4,1,CH,EQ,C' ',AND,12,1,CH,EQ,C' '),     
                  OVERLAY=(9:C'0'),                                     
                           HIT=NEXT),                                   
         IFTHEN=(WHEN=(5,1,CH,NE,C' ',AND,5,1,FS,NE,NUM),               
          OVERLAY=(11:C'I'),                                            
                   HIT=NEXT),                                           
           IFTHEN=(WHEN=(5,1,CH,NE,C' ',AND,12,1,CH,EQ,C' '),           
            OVERLAY=(12:C'N'),                                          
                     HIT=NEXT),                                         
             IFTHEN=(WHEN=(5,1,CH,EQ,C' ',AND,12,1,CH,EQ,C'N'),         
              OVERLAY=(12:C'B'),                                        
                       HIT=NEXT),                                       
               IFTHEN=(WHEN=(5,1,CH,NE,C' ',AND,12,1,CH,EQ,C'B'),       
                OVERLAY=(11:C'I'),                                      
                       HIT=NEXT),                                       
                 IFTHEN=(WHEN=(5,1,CH,EQ,C' ',AND,12,1,CH,EQ,C' '),     
                  OVERLAY=(10:C'0'),                                    
                           HIT=NEXT),                                   
         IFTHEN=(WHEN=(11,1,CH,EQ,C'I',OR,12,1,CH,EQ,C' '),             
          BUILD=(1,5)),                                                 
         IFTHEN=(WHEN=(11,1,CH,NE,C'I',AND,12,1,CH,NE,C' '),            
          BUILD=(6,5))                                                  
/*                         
00001
0001 
001  
01   
1    
00012
0012 
012  
12   
00123
0123 
123  
01234
1234 
12345

1 2  
 1 2 
  1 2
1 23 
 1 23
12 3 
 12 3
    X
   X 
  X  
 X   
X    
   1X
  X1 
 1X  
1X   
  12X
 12X 
1X3  
 12X4
X234 
12X45
OPTION COPY                                                         
INREC IFTHEN=(WHEN=(13,12,CH,EQ,C' '),OVERLAY=(13:C'000000000000')),
      IFTHEN=(WHEN=(13,11,CH,EQ,C' '),OVERLAY=(13:C'00000000000')), 
      IFTHEN=(WHEN=(13,10,CH,EQ,C' '),OVERLAY=(13:C'0000000000')),  
      IFTHEN=(WHEN=(13,09,CH,EQ,C' '),OVERLAY=(13:C'000000000')),   
      IFTHEN=(WHEN=(13,08,CH,EQ,C' '),OVERLAY=(13:C'00000000')),    
      IFTHEN=(WHEN=(13,07,CH,EQ,C' '),OVERLAY=(13:C'0000000')),     
      IFTHEN=(WHEN=(13,06,CH,EQ,C' '),OVERLAY=(13:C'000000')),      
      IFTHEN=(WHEN=(13,05,CH,EQ,C' '),OVERLAY=(13:C'00000')),       
      IFTHEN=(WHEN=(13,04,CH,EQ,C' '),OVERLAY=(13:C'0000')),        
      IFTHEN=(WHEN=(13,03,CH,EQ,C' '),OVERLAY=(13:C'000')),         
      IFTHEN=(WHEN=(13,02,CH,EQ,C' '),OVERLAY=(13:C'00')),          
      IFTHEN=(WHEN=(13,01,CH,EQ,C' '),OVERLAY=(13:C'0'))