我将创建绑定 RPG 程序 (CRTBNDRPG) 与示例程序一起使用
工作日志
Ownership of object QSORTR in QTEMP type *MODULE changed.
Definition not found for symbol 'QSORT'.
Program QSORTR in library QTEMP not created.
Compilation failed. Program QSORTR not created in library QTEMP.
代码是
H DFTACTGRP(*NO) BNDDIR('QC2LE')
D qsort PR ExtProc('qsort')
D base * value
D num 10U 0 value
D width 10U 0 value
D compare * procptr value
** Sort the array by DtlItem
c callp qsort(%addr(Order1): numitems:
c %size(Order): %paddr('SORTBYITEM'))
c For idx= 1 to numitems
c eval tmpstr = order1(idx).DtlItem
c Dsply tmpstr
c Endfor
...
答案 0 :(得分:1)
它应该可以工作。 jon paris article on qsort
这是代码中的文章:
sudo npm install
npm run dev
编译:
** test0260r: sort data struct array using qsort.
h option(*srcstmt:*nodebugio)
h bnddir('QC2LE')
** --------------------------- test0260r ---------------------------
** test0260r: sort data struct array using qsort.
dtest0260r pr extpgm('TEST0260R')
** --------------------------- qsort --------------------------------
d qsort pr extproc('qsort')
d dataStart * value
d elemCount 10u 0 value
d elemSize 10u 0 value
d compareFunc * ProcPtr value
** --------------------------- test0260r ---------------------------
** test0260r: sort data struct array using qsort.
dtest0260r pi
d pSeqProcedure s * ProcPtr
d Inz(%PAddr(SeqNameCityState))
** -------------------- customerData -----------------------
d customerData ds Dim(1000) Qualified
d name 30a
d address1 40a
d address2 40a
d city 30a
d state 2a
d zip 5s 0
d customerCount s 10i 0
/free
customerCount = 50 ;
qsort ( %Addr(customerData)
: customerCount
: %Size(customerData)
: pSeqProcedure );
*inlr = '1' ;
return ;
/end-free
** ------------------- seqNameCityState -------------------------
p SeqNameCityState...
p b
d pi 10i 0
d elementA LikeDS(customerData)
d elementB LikeDS(customerData)
d high s 10i 0 inz(1)
d low s 10i 0 inz(-1)
d equal s 10i 0 inz(0)
/Free
If elementA.state > elementB.state;
Return HIGH;
ElseIf elementA.state < elementB.state;
Return LOW;
ElseIf elementA.city > elementB.city;
Return HIGH;
ElseIf elementA.city < elementB.city;
Return LOW;
ElseIf elementA.name > elementB.name;
Return HIGH;
ElseIf elementA.name < elementB.name;
Return LOW;
Else;
Return EQUAL;
EndIf;
/end-free
p e
或
CRTRPGMOD MODULE(TEST0260R) SRCFILE(QRPGLESRC) DBGVIEW(*ALL)
CRTPGM PGM(TEST0260R)