Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298413
  • 博文数量: 287
  • 博客积分: 11000
  • 博客等级: 上将
  • 技术积分: 3833
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-16 08:43
文章分类
文章存档

2013年(15)

2012年(17)

2011年(17)

2010年(135)

2009年(85)

2008年(18)

分类: 系统运维

2009-03-26 23:00:06

RPG IV 编程问题百解(5)引用外部DS(2)
 
提问:
Jmasak
Trying to do a lookup and/or build on a data stucture array. not usre if I set
this up correctly.
 DNonBill_Jobs     ds                      dim(100) Qualified Inz
     D  NB_Job#                       5A   overlay(NonBill_Jobs)     
     D  NB_JNme                      23A   overlay(NonBill_Jobs:*next)
     D  NB_JobHrs                     9P 2 overlay(NonBill_Jobs:*next) 
 dIndex              s                4  0
 dJob#In             s                5  
 d hoursin           s                9P 2 
 d namein            s               23
 d x                 s                     like(index) inz(0)
Trying to build the array.  Doing a lookup to see if NB_Job# is present, if it
is, add new hourin to NB_JobHRs.  If not there add one to arrary index and
populate the fields.
  
/free
   index = %lookup(job#in:nb_job#);
   if index = *zero;
      X +=1;
      NB_Job#(x) = Job#in;
      NB_Jname(x) = something;
      NB_JobHrs(x) = something;
      x += 1;
   elsif index <> *zero;
      NB_JobHRs(index) += hoursin;
   endif;
/End-Free
 
回答1:
passthru
If DS is referenced by Qualified, can't limited by DIM keyword.
回答2:
passthru
 
Jmasak, If you really want to reference a data structure that is already definded in an external pgm, module or procedure and the DS maybe contain numbers of recodes like data in an array. I think it's right way following below source codes:
 
 DNonBill_Jobs     ds                      qualified
 DNonBill_jobsIn                           likeds(ds_NonBill_jobs_in) dim(100)
 DNonBill_jobsOut                          likeds(ds_NonBill_jobs_Out) dim(100)
 DPubPtr                           *
  *
 /free
   //Main
   ExSr Init;
   ExSr MvDataIn;
   Exsr CallRatePro;
   Exsr ContDataOut;
   Exsr Exit;
   //move conditional data into the DS of NonBill_jobsIn
   begsr MvDataIn;
      //process ps/lf(s) for data that will be moved into the
      // DS of NonBill_jobsIn
      NonBill_jobsIn.fld1 = fld1;
      NonBill_jobsIn.fld2 = fld2;
      ......
   endsr;
   begsr CallRatePro ;
      PubPtr = %Addr(NonBill_Jobs);
      Callp RateCSPgm(Ds_Project:Ds_ReturnCode:PubPtr);
      //process Ds_ReturnCode
      ....     
   endsr;
   begsr ContDataOut;
      //%lookup for NonBill_jobsOut
      ......
   endsr;
   ......
 /end-free
阅读(861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~