From: Brad Stone
To: All
Today at work, a colleague and I were discussing the proper way to read a file from beginning to end. 9 illustrates the two methods we discussed.
Today at work, a colleague and I were discussing the proper way to read a file from beginning to end. Figure 9 illustrates the two methods we discussed.
My colleague and I were taught to use Method 1. She now uses Method 2, though, claiming that Method 1 misses records (either the first or last).
Any input on this would be appreciated.
From: Chris Rowell
To: Brad Stone
Both methods work without missing any records.
I use the second method with a slight modification; I use a DOUEQ instead of the DOWEQ (see 10). My modified version of Method 2 eliminates the need to turn the end-of-file indicator off. It is also less confusing because of the single READ and because your calculations follow the READ. I think this method provides a more logical "flow."
I use the second method with a slight modification; I use a DOUEQ instead of the DOWEQ (see Figure 10). My modified version of Method 2 eliminates the need to turn the end-of-file indicator off. It is also less confusing because of the single READ and because your calculations follow the READ. I think this method provides a more logical "flow."
From: Matt Sargent
To: Brad Stone
I always use the first method. Functionally, they will perform the same, and neither should miss any records. Any problem that would cause the first method to miss records (such as the file pointer not being at the beginning of the file) would also affect the second method.
I use the first method because it is much cleaner and simpler. The second method is actually checking for end-of-file twice each time a record is read, which is pointless and wastes system resources. Furthermore, if you flowchart what you want to happen, you'll see that Method 1 actually corresponds to your logic flow, while Method 2 does not.
From: Ted Holt
To: Brad Stone
Both ways are proper. Like you, I prefer Method 1. If you use Method 2, you have to make sure that nothing inside the loop messes with indicator 99, or the program could end without processing the entire file. 11 illustrates another way to read a file without having to worry about the indicator.
Both ways are proper. Like you, I prefer Method 1. If you use Method 2, you have to make sure that nothing inside the loop messes with indicator 99, or the program could end without processing the entire file. Figure 11 illustrates another way to read a file without having to worry about the indicator.
I like to use this technique, as I can use the same indicator throughout the program for all my I/O and LOKUPs.
This is the way I was taught to write COBOL, and I've used it in RPG since then.
From: Brad Stone
To: Ted Holt
I like the idea you have about using the EOF field. EOF in this case would have to be defined as a one-character field.
The only problem I see is that the move (in a worst-case scenario) slows down processing that much more.
But, otherwise, trying to make RPG look like a "normal" language helps a lot.
TechTalk: READ Loops in RPG
Figure 9: Two Methods to Read a File
* Read loops: * * Method 1 * C READ CUSMAS 99 C *IN99 DOWEQ*OFF C . C . C . C READ CUSMAS 99 C ENDDO * * Method 2 * C MOVE *OFF *IN99 C *IN99 DOWEQ*OFF C READ CUSMAS 99 C *IN99 IFEQ *OFF C . C . C . C ENDIF C ENDDO
TechTalk: READ Loops in RPG
Figure 10: Modified Method 2
* * Modified Method 2 * C *IN99 DOUEQ*ON C READ CUSMAS 99 C *IN99 IFEQ *OFF C . C . C . C ENDIF C ENDDO
TechTalk: READ Loops in RPG
Figure 11: Modified Method 1
* * Modified Method 1 * C READ CUSMAS 99 C MOVE *IN99 EOF 1 C EOF DOWEQ*OFF C . C . C . C READ CUSMAS 99 C MOVE *IN99 EOF C ENDDO
LATEST COMMENTS
MC Press Online