如何将多次出现的 DS 复制到另一个 DS RPG
How to copy a multi occurrence DS to another DS RPG
我正在尝试将一个 DS 复制到另一个 DS。
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
。
我试过只分配它。
MYRESULTS2 = MYRESULTS;
%OCCUR(MYRESULTS2) = 3 ;
opsitem = %TRIM(MYRESULTS2.PAOPIID);
PrintLine =opsitem ;
Except;
第一次出现有效...但它不会复制其余部分,即。发生 3.
我确实通过循环 MYRESULTS
让它工作,并且每次出现都将它复制到 MYRESULTS2
。
有没有更快的方法来分配从 MYRESULTS
到 MYRESULTS2
的所有事件
V6.1 - IBM
我首先建议您开始对数组使用 dim 而不是 occur。因为那将是一个简单的一行 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
我使用指向 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 中出现的所有事件了
我正在尝试将一个 DS 复制到另一个 DS。
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
。
我试过只分配它。
MYRESULTS2 = MYRESULTS;
%OCCUR(MYRESULTS2) = 3 ;
opsitem = %TRIM(MYRESULTS2.PAOPIID);
PrintLine =opsitem ;
Except;
第一次出现有效...但它不会复制其余部分,即。发生 3.
我确实通过循环 MYRESULTS
让它工作,并且每次出现都将它复制到 MYRESULTS2
。
有没有更快的方法来分配从 MYRESULTS
到 MYRESULTS2
V6.1 - IBM
我首先建议您开始对数组使用 dim 而不是 occur。因为那将是一个简单的一行 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
我使用指向 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 中出现的所有事件了