Data structures 转换为固定位置的完全自由格式数据结构
我正在将程序转换为完全自由格式,但不知道如何用固定位置替换数据结构。我在网上也找不到好的例子 我有如下两种数据结构。 我试过了 及 这是我试图转换的部分Data structures 转换为固定位置的完全自由格式数据结构,data-structures,ibm-midrange,rpgle,Data Structures,Ibm Midrange,Rpgle,我正在将程序转换为完全自由格式,但不知道如何用固定位置替换数据结构。我在网上也找不到好的例子 我有如下两种数据结构。 我试过了 及 这是我试图转换的部分 //************************************************************************* // NORMAL DATA STRUCTURES * //**************
//*************************************************************************
// 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
<代码>覆盖相对于另一个字段的位置,而位置
是绝对位置
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;
虽然这些是直接转换,但我强烈建议命名数据结构,而不是通过
*n
将其保留为未命名。第一个选项不正确。当子字段(bl01、bl02等)覆盖数组(bl)时,它们也将成为数组。bl02的定义将出现错误,因为它将bl02数组从7字符bl数组的第8位开始。@Barbara Morris谢谢。我没有意识到这一点。我尽量避免在可能的情况下使用覆盖。它通常只有在旧的固定格式代码和糟糕的现代实践进行转换时才会出现。是否有正确的格式可以使用,或者我应该从答案中删除该选项?@Player1st,您可以添加一个未命名的项目,比如bl_info,然后定义所有bl01等以覆盖bl_info而不是bl,然后定义bl last,覆盖(bl_info:1)。最后定义bl数组很重要,因为*next表示“覆盖此对象的所有其他对象之后的下一个”,而不是“覆盖此对象之前定义的对象之后的下一个”。一般来说,覆盖数组非常有用。如果你有一个数组信息DIM(100),你有字段NAME,ADDR,ID叠加信息,那么当你对NAME,ADDR或ID数组排序时,整个信息数组被排序在一起。因此叠加数组基本上充当叠加数组的键。这是一个很酷的功能,但与将数组覆盖在一组类似字段上的问题无关。
dcl-ds *n;
bl01 char(7);
bl02 char(7);
bl03 char(7);
...
bl char(7) dim(12) pos(1);
end-ds;
dcl-ds *n;
bl01 char(7);
bl02 char(7);
bl03 char(7);
...
bl char(7) dim(12) samepos(bl01);
end-ds;