|
John, you need to be careful using the %EOF BIF with the CHAIN operation code. From the RPG Reference Manual:- "The following operations, if successful, set %EOF(fielname) off. If the operation is not successful, %EOF(filename) is not changed." There is no problem with the code sample if it is the only place in the program that the file is referenced - but the status of %EOF(filename) after a failed CHAIN is dependent on what it was before the CHAIN. HTH Paul Tuohy ----- Original Message ----- From: "John Brandt Sr." <pgmr@xxxxxxxxxxxxxxx> To: "'RPG programming on the AS400 / iSeries'" <rpg400-l@xxxxxxxxxxxx> Sent: Friday, March 26, 2004 5:12 PM Subject: RE: Loop code > I don't see anywhere that there are any holes in my code. > > Not sure what you are implying here. The Chain opcode isn't > conditional on having been executed in a prior instruction. > Are you implying that the line > C myklist chain myfile > is "if I feel like it, and I haven't chained before, chain. Otherwise, just > skip this one?" > The Chain will set the %eof condition when it is executed. > If the chain fails, the DOW(hile) will not execute, as it shouldn't. > > It works very well on my system and the systems of thousands of my clients. > > John Brandt > iStudio400.com > > -----Original Message----- > From: M. Lazarus [mailto:mlazarus@xxxxxxxx] > Sent: Friday, March 26, 2004 10:31 AM > To: RPG programming on the AS400 / iSeries > Subject: Loop code > > > John, > > There are 2 holes in your code: > > 1) If the CHAIN fails the loop will still execute, probably displaying > incorrect data. CHAIN sets the %Found() flag. > > 2) If you will be executing this code more than once within the program > the loop will probably NOT execute. This is because the %EOF() condition > will likely have already been set by the previous execution of this loop. > > Changing the CHAIN to a SETLL/READE combo should fix the problem. > > -mark > > At 3/26/04 11:12 AM, you wrote: > >While his code would write a duplicate record at the bottom of the subfile, > >and your code may be efficient, my suggestion would be: > > > >C myklist chain myfile > >C dow NOT %eof(myfile) > >C eval rrn = rrn + 1 > >C write mysubfile > >C myklist reade myfile > >C enddo > > > >JMHO > >John Brandt > >iStudio400.com > > > >-----Original Message----- > >From: Marvin Radding [mailto:MRadding@xxxxxxxxxxxx] > >Sent: Friday, March 26, 2004 9:58 AM > >To: rpg400-l@xxxxxxxxxxxx > >Subject: RE: RPG400-L Digest, Vol 3, Issue 231 > > > > > > > >While there is nothing wrong with your code, I think this way is more > >effiecient. > > > >C myklist setll myfile > >C > >C dou %eof(myfile) > >C > >C myklist reade myfile > >C if %eof(myfile) > >C iter > >C endif > >C > >C eval rrn = rrn + 1 > >C write mysubfile > >C > >C enddo > > > >Marvin Radding > > > > > >message: 1 > >date: Thu, 25 Mar 2004 14:32:35 -0800 (PST) > >from: simafrog <SimaFrog@xxxxxxxxxx> > >subject: SETLL ONE SLIGHT PROBLEM > > > >Actually I don't think I can do this here anyway. One problem remaining > >is that the reade of the Detail file is causing one extra record to be > >added to the work file, the last one of the batch is duplicated. Here is > >the code: > > C BLD BEGSR > > C* > > C OHKEY SETLLORDHEDR 40 > > C* > > C *IN40 DOWEQ*OFF > > C* > > > > C OHKEY READEORDHEDR 40 > > C *IN40 IFEQ '0' > > C* > > C C* > > C ODKEY SETLLORDDTL 50 > > C *IN50 DOUEQ*ON > > C ODKEY READEORDDTL 50 > > C WRITEORDSWRKF > > C END > > C END > > C END > > C* > > C ENDSR
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.