|
>From the manual *** Quote *ON *** %EOF{(file_name)} %EOF returns '1' if the most recent read operation or write to a subfile ended in an end of file or beginning of file condition; otherwise, it returns '0'. The operations that set %EOF are: o "READ (Read a Record)" on page 663 o "READC (Read Next Changed Record)" on page 665 o "READE (Read Equal Key)" on page 667 o "READP (Read Prior Record)" on page 670 o "READPE (Read Prior Equal)" on page 672 o "WRITE (Create New Records)" on page 732 (subfile only). The following operations, if successful, set %EOF(filename) off. If the operation is not successful, %EOF(filename) is not changed. %EOF with no parameter is not changed by these operations. o "CHAIN (Random Retrieval from a File)" on page 534 o "OPEN (Open File for Processing)" on page 651 o "SETGT (Set Greater Than)" on page 693 o "SETLL (Set Lower Limit)" on page 697 *** Quote *OFF *** Note the part that says " If the operation is not successful, %EOF(filename) is not changed. %EOF with no parameter is not changed by these operations." If at any time %EOF was set, the failure of your chain will not change the value of this flag if there is no filename supplied. Could this be the problem you are having? Marvin -----Original Message----- From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Peter.Colpaert@xxxxxxxxxx Sent: Thursday, August 18, 2005 7:26 AM To: RPG programming on the AS400 / iSeries Subject: Re: How to properly use %EOF() bif? Igor, I never use %eof after a Chain. More specifically, I never use Chain to start a loop, always setll + read/reade. Just my opinion of course, others may contradict me. But I've never encountered problems like the one you describe, so I guess my way of coding seems to work. HTH, Peter Colpaert Application Developer Massive - Kontich, Belgium ----- Yoda of Borg are we. Futile is resistance, assimilated will you be. ----- Igor.Beslic@xxxxxxxxxxxx Sent by: rpg400-l-bounces@xxxxxxxxxxxx 18/08/2005 16:17 Please respond to RPG programming on the AS400 / iSeries To: rpg400-l@xxxxxxxxxxxx cc: Subject: How to properly use %EOF() bif? Hello! Recently I've stucked with problem i resolved but still I'm asking for explanation. HOW %EOF() bif works? I read that resulting inds are set off before performing operations which affect them so I believed that file status BIFs (%FOUND, %EOF, %EQUAL..) work similary. I had program that read keys from array and for every key chained to file and read all records with current key. LOOP A describes simplified process. LOOP A 01 FOR COUNT=1 TO %Elem(keyARRAY); 02 key4file=keyARRAY(COUNT); 03 chain key4file KEYEDFILE; 04 if %Found(); 05 dow NOT %Eof(); 06 register(); 07 reade key4file KEYEDFILE; 08 ENDDO; 09 endIf; 10 endFor; The problem is that loop was good just for the first iteration. On second iteration, when program successfuly chained to new record with new key, %EOF() bif in line 05 returned result that refered to last READE operation but not CHAIN. I used this approach because I thought that CHAIN is some combination of SETLL+READ but obviosly I was wrong. I altered LOOP with SETLL and READ operations as in LOOP B example and now program process all records with keys in keyARRAY: LOOP B 01 FOR COUNT=1 TO %Elem(keyARRAY); 02 key4file=keyARRAY(COUNT); 03 setll key4file KEYEDFILE; 04 if %Equal(); 05 read KEYEDFILE; 06 dow NOT %Eof(); 07 register(); 08 reade key4file KEYEDFILE; 09 ENDDO; 10 endif; 11 endFor; Now I'm asking is it restricted to perform only read{E,P} operations before using %EOF or %BOF built in functions?? Best regards, Igor Bešlić, dipl. ing. rač. VOLKSBANK d.d. OJ Informatika Zelinska 2, 10000 Zagreb tel: +385 1 6326422
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 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.