转换为具有固定位置的完全自由格式数据结构
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
提前致谢
编辑:不要在这里使用第一个选项。在此处保留答案原样,因为最好在选项不正确时进行记录。
这里有两种选择。您可以使用 pos
或 overlay
。 overlay
相对于另一个字段的位置,而 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;
我正在将程序转换为完全自由格式,但不知道如何用固定位置替换数据结构。而且我在网上也找不到很好的例子。
我有如下两种数据结构。 我试过了
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
提前致谢
编辑:不要在这里使用第一个选项。在此处保留答案原样,因为最好在选项不正确时进行记录。
这里有两种选择。您可以使用 pos
或 overlay
。 overlay
相对于另一个字段的位置,而 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;