Ibm midrange Rpgle数据结构问题
我所填写的表格如下:Ibm midrange Rpgle数据结构问题,ibm-midrange,rpgle,Ibm Midrange,Rpgle,我所填写的表格如下: "췡전V“为UTF16十六进制,与CDE1C8040056相同 请有人帮助我了解发生了什么:- 1) 我把我的工作CCSID改为833 2)我运行的代码如下:- D w_VIN ds D vin1 like(AAF010) D vin2 like(AACDE1) D vi
"췡전V“为UTF16十六进制,与CDE1C8040056相同 请有人帮助我了解发生了什么:-
1) 我把我的工作CCSID改为833
2)我运行的代码如下:-
D w_VIN ds
D vin1 like(AAF010)
D vin2 like(AACDE1)
D vin3 like(AAF006)
其中:-
AAF010是C(10)CCSID(1200),AACDE1是C(1)CCSID(1200),AAF006是C(6)
其中DataFld C(17)CCSID(1200)
执行的代码是:-
w_VIN = dataFld;
评估数据FLD:x
00000 CDE1C804 00560020 00200020 00200020
00010 00200020 00200020 00200020 00200020
00020 0020.... ........ ........ ........
评估车辆识别号:x00000 0EC2D7B8 E50FE540 40404040 40404040
00010 40404040 40404040 40404040 40404040
00020 4040.... ........ ........ ........
我期待CDE1C8040056,我真的不明白为什么,请有人解释一下?
我怎样才能得到我想要的结果?
问候,
Jemrug数据结构没有明确指定给它们的数据类型。它们始终是使用作业CCSID隐式固定的字符字段。因此
w_VIN
是CHAR()CCSID(833)
。对此你无能为力。但是,子字段可以是您想要的任何内容,并且您可以将字段彼此重叠,以按照您的意愿对数据结构进行切片和切分。例如:
dcl-ds w_VIN;
vin1 Like(aaf010);
vin2 Like(aacde1);
vin3 Like(aaf006);
ucs2_VIN Like(dataFld) Pos(1);
end-ds;
现在w_VIN
的定义与dataFld
不同,因此如果您这样做,就会发生转换
w_VIN = dataFld;
ucs2_VIN = dataFld;
ucs2\u VIN
的定义与dataFld
完全相同,如果您这样做,则不会发生转换
w_VIN = dataFld;
ucs2_VIN = dataFld;
由于
ucs2\u VIN
明确地从数据结构的第一个字符开始,它将覆盖vin1
、vin2
和vin3
。定义这些子字段的顺序很重要。如果将ucs\u VIN
放在第一位,vin1
、vin2
和vin3
将在结构中紧跟其后,但由于我首先定义了数据结构,然后在最后添加了一个附加定义,最后一个定义将覆盖在其他定义之上。那么我如何确保正确的值最终出现在vin1、vin2和vin3中?是使用%subst(数据FLD,1,10)ETC移动数据FLD w_vin的唯一方法;谁知道这有点疯狂……非常感谢你让我明白。你现在已经打开了我的眼睛。