我正在尝试将DS复制到另一个DS。
notifyItemChanged(int position)
所以我想将D MYRESULTS DS OCCURS(2000)
D QUALIFIED
D PAOPIID 20A
D POPITPE 10A
D POPISTPE 10A
D POPIKNID 20A
D PINSTAT 10A
D PLEAFIND 1A
D CLOPIID 20A
D COPITPE 10A
D COPISTPE 10A
D COPIKNID 20A
D CINSTAT 10A
D CLEAFIND 1A
D INSTAT 10A
D MYRESULTS2 DS OCCURS(2000)
D QUALIFIED
D PAOPIID 20A
D POPITPE 10A
D POPISTPE 10A
D POPIKNID 20A
D PINSTAT 10A
D PLEAFIND 1A
D CLOPIID 20A
D COPITPE 10A
D COPISTPE 10A
D COPIKNID 20A
D CINSTAT 10A
D CLEAFIND 1A
D INSTAT 10A
复制到MYRESULTS
而不循环MYRESULTS2
并处理每个元素以将其复制到MYRESULTS
。
我确实尝试过分配它。
MYRESULTS2
第一次出现有效......但它不复制其余的即...发生3。
我确实通过循环 MYRESULTS2 = MYRESULTS;
%OCCUR(MYRESULTS2) = 3 ;
opsitem = %TRIM(MYRESULTS2.PAOPIID);
PrintLine =opsitem ;
Except;
使其工作,并且每次出现都将其复制到MYRESULTS
。
是否有更快捷的方式将所有发生的事件从MYRESULTS2
分配到MYRESULTS
V6.1 - IBM
答案 0 :(得分:4)
我首先建议你开始使用dim而不是数组。因为那时它将是一个简单的单行eval语句。
无论如何,您可以使用C ++函数MEMCPY获得最快的结果(假设两个数据结构的格式和尺寸完全相同):
hdftactgrp(*no) actgrp(*new)
dMEMCPY pr extproc('memcpy')
d TargetPointer * value
d SourcePointer * value
d CopyLength 10u 0 value
dSample1 ds qualified occurs(10)
dNumber 3p 0
dValue 10a
dSample2 ds qualified occurs(10)
dNumber 3p 0
dValue 10a
dresult s 1a
/free
%occur(Sample1) = 1;
Sample1.Number = 1;
Sample1.Value = 'One';
%occur(Sample1) = 10;
Sample1.Number = 10;
Sample1.Value = 'Ten';
%occur(Sample1) = 1;
%occur(Sample2) = 1;
MEMCPY(%addr(Sample2): %addr(Sample1): %size(Sample1) * %elem(Sample1));
%occur(Sample2) = 10;
dsply Sample2.Value '*EXT' result;
*inlr = *on;
/end-free
答案 1 :(得分:0)
我使用指向DS的指针工作。
D Mypointer s *
D MYRESULTS2 DS OCCURS(2000) based(Mypointer)
D QUALIFIED
D PAOPIID 20A
D POPITPE 10A
D POPISTPE 10A
然后当你想要分配它时。
Mypointer = %ADDR(MYRESULTS);
在此之后,您可以使用DS中的所有匹配项