Joined: 23 Nov 2006 Posts: 19270 Location: Inside the Matrix
There may not be a simple COBOL answer for your requirement.
This was found in another forum
I need to read a VSAM/KSDS file backwards. We do this all the time with Assembler I/O modules, but we can't find a READ PREVIOUS verb in the Cobol language that the compiler will accept.
Is is possible to read a VSAM/KSDS file backwards in Cobol?
and the response was:
The READ file-name PREVIOUS is NOT in the current version of COBOL unless you are using a 2002 compatible COBOL, like Microfocus NET EXPRESS 4.0 or later. Even IBM's newest Enterprise COBOL 3.4 does not do this yet. (I have the manual.)
It is supported in CICS via a browse with GET PREVIOUS.
If you don't have to read a lot of data, such as just 1 or 2 records prior to some other record you can write an almost there routine: (You really need to understand your data and key relationships)
Decrement some right most key value by some value
Start FILE-NAME key is record-key
read next file-name
(you need to keep track of the results and check for when you have the record you started with, etc.)
Kluggy at best.
Otherwise, if you need a lot of this, create an alternate key value in binary-inverted sequence and do a read next on the binary-inverted key value.
If you or someone in your group knows assembler, that may be a way to go. Adding an inverted key would work, but may not be desirable - you will need to determine a "good" solution for you environment.
Good luck and let us know how you meet the requirement