转换为具有固定位置的完全自由格式数据结构

Convert to full free format Datastructure with fixed positions

我正在将程序转换为完全自由格式,但不知道如何用固定位置替换数据结构。而且我在网上也找不到很好的例子。

我有如下两种数据结构。 我试过了

dcl-ds bl dim(12)
bl01 char(7);
bl02 char(7);
...
end-ds

 dcl-s bl char(7) dim(12);

这是我尝试转换的部分

 //*************************************************************************
  // NORMAL DATA STRUCTURES                                                 *
  //*************************************************************************
 D                 DS
 D  BL                     1     84
 D                                     DIM(12)                              BARCODE LABEL
 D  BL01                   1      7
 D  BL02                   8     14
 D  BL03                  15     21
 D  BL04                  22     28
 D  BL05                  29     35
 D  BL06                  36     42
 D  BL07                  43     49
 D  BL08                  50     56
 D  BL09                  57     63
 D  BL10                  64     70
 D  BL11                  71     77
 D  BL12                  78     84
 D                 DS
 D  TL                     1     72
 D                                     DIM(12)                              TEXT LABEL
 D  TL01                   1      6
 D  TL02                   7     12
 D  TL03                  13     18
 D  TL04                  19     24
 D  TL05                  25     30
 D  TL06                  31     36
 D  TL07                  37     42
 D  TL08                  43     48
 D  TL09                  49     54
 D  TL10                  55     60
 D  TL11                  61     66
 D  TL12                  67     72            

提前致谢

编辑:不要在这里使用第一个选项。在此处保留答案原样,因为最好在选项不正确时进行记录。

这里有两种选择。您可以使用 posoverlayoverlay 相对于另一个字段的位置,而 pos 是一个绝对位置。

dcl-ds *n;
    bl char(7) dim(12);
    bl01 char(7) overlay(bl);
    bl02 char(7) overlay(bl:*next);
    bl03 char(7) overlay(bl:*next);
    bl04 char(7) overlay(bl:*next);
    bl05 char(7) overlay(bl:*next);
    bl06 char(7) overlay(bl:*next);
    bl07 char(7) overlay(bl:*next);
    bl08 char(7) overlay(bl:*next);
    bl09 char(7) overlay(bl:*next);
    bl10 char(7) overlay(bl:*next);
    bl11 char(7) overlay(bl:*next);
    bl12 char(7) overlay(bl:*next);
end-ds;

其他选项:

dcl-ds *n;
    bl char(7) dim(12) pos(1);
    bl01 char(7) pos(1);
    bl02 char(7) pos(8);
    bl03 char(7) pos(15);
    ...
end-ds;

如果最后对数组进行编码,则不必对所有其他子字段的位置进行硬编码。

dcl-ds *n;                             
    bl01 char(7);                      
    bl02 char(7);                      
    bl03 char(7);  
    ...                 
    bl char(7) dim(12) pos(1);  
end-ds;

您也可以使用 SAMEPOS(bl01) 来定义从与 BL01 相同的位置开始的数组。我喜欢这样编码,因为它使 BL01 和 BL 之间的关系更加清晰。如果 BL01 不是数据结构中的第一个子字段,使用 SAMEPOS 将是对子字段编码的最佳方式。

dcl-ds *n;                             
    bl01 char(7);                      
    bl02 char(7);                      
    bl03 char(7);  
    ...                 
    bl char(7) dim(12) samepos(bl01);  
end-ds;