View previous topic :: View next topic
|
Author |
Message |
manishapatnaik
New User
Joined: 10 Nov 2008 Posts: 3 Location: chennai
|
|
|
|
Hi,
I have a requirement of validating an input file. The input file contains a header record, detail records and a trailer record at the end. I have the match the number of detail records in the input file with the count mentioned in the trailer record. The input file looks something like this,
127032011
2asdsadasd
2dfgsdfgfdg
2dfdsfdsfer
2dfsdfgfgfg
3000000004
This question might look like reinventing the same wheel since it is possible with a SORT . But the solution is required in a COBOL pgm using either SORT area or TEMP File. |
|
Back to top |
|
|
Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
And the question is?
You should be able to take any Cobol program which reads this file and strip out the specific processing for that program, leaving just the routine validation of data integrity that is coded without thinking about it.
Why you'd need "stand alone" validation when it should always be there... I suppose it isn't always there?
Code: |
Open file
Blow up if bad return
Read file
Blow up if not header
Blow up if filename on header not equal to filename expected by program
Blow up if date on header not = date on business date file
Process until end of file or trailer found
Read
Check sequence of data
Add to count(s)
Blow up if end of file
Validate counts on trailever vs program and blow up if different
Read file
Blow up if not end of file
"Blow up" should always include sufficient diagnostic messages/data to identify position on file where problem exists. |
Edit: Forgot the Code tags! |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
Quote: |
But the solution is required in a COBOL pgm using either SORT area or TEMP File. |
ok, prince of Demmark ...
COBOL or SORT, that is the question? |
|
Back to top |
|
|
manishapatnaik
New User
Joined: 10 Nov 2008 Posts: 3 Location: chennai
|
|
|
|
Quote: |
Why you'd need "stand alone" validation when it should always be there... I suppose it isn't always there? |
Once the Validation is done, I need to pick up every single detail record in the file and do other processing. And i need to read the file content after the validation to process the detail record one by one.
I have to use COBOL Program only. And SORT i mentioned was COBOL internal SORT Area or usage of Temporary File. |
|
Back to top |
|
|
Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
This is really unclear to me.
You have a file with header (containing a date), data and trailer (containing at least record counts).
You want to process the file.
You read the header, checking the date.
You read the next record, ensuring it is data or trailer.
If data, you check for sequence, you count it and do your processing.
Repeat until EOF or trailer encountered.
If EOF encountered before trailer, invalid.
If trailer encountered, check counts.
Read, if not EOF, invalid.
Produce a report (DISPLAY usually) with totals, dates etc. Output files should have header/trailer generated with correct values on.
Good to have a "filename" on the header, so you know you're reading the right file. Good to have "hash totals" per record-type on the trailer, so you reduce the chance of duplicating the wrong record on the output.
This type of stuff should exist in every program which reads a file with header and trailer on.
I don't know why you think SORT comes into the equation.
You can do all that in SORT, but then JCL errors can happen so your Cobol program might not be using the file verified by the SORT. No point in doing it with an internal SORT in the Cobol program when you can just do it as you are going along. |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
Quote: |
I have to use COBOL Program only. |
plain stupidity ... ( the way the issue is described )
how do You prioritize the validation ?
1) the count
2) the record content
can they be mixed ?
what other processing should be done ?
in case 1 the smarter solution would be to use sort to check the counts
after that do any other processing with a cobol program
You will have to do two passes of data anyway |
|
Back to top |
|
|
manishapatnaik
New User
Joined: 10 Nov 2008 Posts: 3 Location: chennai
|
|
|
|
Quote: |
plain stupidity ... ( the way the issue is described ) |
Probably use a better way to explain my requirements.
1. I need to perform validation of input detail records count and count mentioned at the trailer.
2. Once validation is perfect, process each detail record one by one.
If i go with only validation of trailer count alone, my problem isnt solved .
I have to pick up each detail record one by one after the validation of count is done and I dont want to open-read-close the input file again and again due to huge amount of records. So i want to use a temporary file (which can be used with SD) which will ease my problem. This temp file can be used to first perform validation and then aagin to do the processing. So i am performing two things with a single read of the input file. I hope this clarifies the doubt.
Quote: |
how do You prioritize the validation ?
1) the count
2) the record content |
First the Count, Then the Record content.
Quote: |
what other processing should be done ? |
This will happen only when record count is tallyed. and Processing will include fetching data from tables etc. |
|
Back to top |
|
|
dbzTHEdinosauer
Global Moderator
Joined: 20 Oct 2006 Posts: 6966 Location: porcelain throne
|
|
|
|
well, since a sorted file is not necessary to the cobol program doing the record content validation,
why not have a simple OPTION=COPY Sort preceding the COBOL program
and bypass the COBOL program if the counts are not correct?
less strain on the mainframe, but more strain on logic ability. |
|
Back to top |
|
|
enrico-sorichetti
Superior Member
Joined: 14 Mar 2007 Posts: 10873 Location: italy
|
|
|
|
Quote: |
So i am performing two things with a single read of the input file. |
whatever Your beliefs You will have in any case ( cobol,sort,pencil and paper ) at least two passes of data
You have two <processes>
<process> 1 validate
validate the total count
validate the records
<process> 2 update
update the <thing>
what is the show stopper for the update ???
1) total count mismatch
2) a record in error also ???
case ( 1 ) TWO PASSES
<step 1 > just use sort to check the count and set the condition code accordingly
<step 2 > check records and if not in error update accordingly
case ( 1 + 2 ) --- a) TWO PASSES
record checking does not depend on the total count
<step 1 > use a COBOL program to achieve both results
<step 2 > update things
case ( 1 + 2 ) --- b) THREE PASSES
record checking depends on the total count
<step 1 > validate and save the fucking total count
<step 2 > validate each record
<step 3 > update <things> |
|
Back to top |
|
|
Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7309 Location: Inside the Matrix
|
|
|
|
OK, I think you need to tell us a bit more before we go off in all directions.
Is it an "external" file, ie data delivered to you from another source?
Is it an existing file from part of your system?
If it is the second, it is easier, since you expect the data to be correct (don't you?).
Proceed as I have already outlined. One pass of the file. No extra steps. Nuffink.
If it is external and you, code one program to do a full validation of the data that you are going to use, if you are concered about the data.
If your sole concern is to verify the counts, use SORT. Check the date (can be done), sequence (can be done) and trailer record total (can be done).
Then in your Cobol program, do all the same again, even though you "know" the file is OK.
The SORT will tell you more quickly if the file is dodgy.
The stuff in the Cobol program is to ensure you're reading a good file, which to my mind should be done every time.
If it is external and you have no expectation that it is dodgy, just go with the Cobol.[/b] |
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19244 Location: Inside the Matrix
|
|
|
|
Hello,
Quote: |
I need to pick up every single detail record in the file and do other processing. |
What is thyis "other processing"? Depending on exactly what this is, you may styill be able to do this with one pass of the data. Why does someone in your organizatoin believe you need either a SORT or a TEMP file?
You might consider reading the file and doing whatever "other processing" is needed and at the end (when the trailer is processed) check the count and if not equal terminate the run without saving the results of the run. This will depend on just what is the "other processing".
If the "other processing" prohibits the suggeston, then suimply run a pre-process that validates the count before entering your program. There is no business reason that this has to be done in one step. If the file has millions and milljons of records, i suggest a single pass is a better choice.
If the count is off, the code generating the count needs to be fixed - not caught later and then retroactively dealt with. . . |
|
Back to top |
|
|
|