Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

COBOL Sort library files 1

Status
Not open for further replies.

aisgeek

MIS
Jan 13, 2003
3
US
I am trying to sort a file descending and am having difficulty.
All of the COBOL programs I work with access library programs for data, the file to sort is also a library program. In the environment division file control, no select statements are used, only COPY FILENAME, and the same in the file section of the data division.
I have used a select statement in file control, and an SD in the file section, but to no avail. Has anyone dealt with this before?
Thanks
 
What difficulties u r facing ??
Which is the platform u r working on ???
 
Have a think about this -

You know that you WRITE a RECORD, but READ a FILE.

Well, a RELEASE is a bit like a WRITE.
You RELEASE a RECORD into the sort file, just as
you might WRITE a RECORD into an ordinary file.
So, you release all the records you
want sorted, into the sort file.

Then after the magic of sorting is done,
you want to return the sorted records
one-at-a-time back to your program.
This is done with the RETURN verb.
But be careful, you RETURN a FILE just
as you READ a FILE.

Anyway, have a look at this code example.
You'll probably need to print it.
Don't worry about the @- and X-labels, just
concentrate on the other code.
(The funny labels like @- and X- etc make sense
to the pre-compiler I wrote to make writing
programs easier - but they are also easy for you,
because you just ignore them.)

CODE
000001 @-COPYRIGHT
000002 @-SET
000003 IDENTIFICATION DIVISION.
000004 PROGRAM-ID. SORT80.
000005 AUTHOR. Grace Hopper.
000006 DATE-WRITTEN. 2000/07/18.
000007 DATE-COMPILED.
000008*HISTORY. 20020821 19595062.
000009*PC. F:\CONTROL\WBPC\HISTORY\sort80\20020821\19595051\sort80.PRE
000010*REMARKS. SORTS A 80 BYTES/RECORD FILE.
000011 ENVIRONMENT DIVISION.
000012 CONFIGURATION SECTION.
000013 SOURCE-COMPUTER. IBM-PC WITH DEBUGGING MODE.
000014*SOURCE-COMPUTER. IBM-PC.
000015 OBJECT-COMPUTER. IBM-PC.
000016 SPECIAL-NAMES.
000017 CONSOLE IS CRT
000018 CURSOR IS WX-CURSOR
000019 CRT STATUS IS WW-KEY-STATUS.
000020 INPUT-OUTPUT SECTION.
000021 FILE-CONTROL.
000022*
000023 SELECT S001-FILE ASSIGN "SORT.WIP"
000024 FILE STATUS IS WW-FILE-STATUS.
000025+
000026 @-L001-SA
000027 @-L002-SA
000028*
000029 DATA DIVISION.
000030 FILE SECTION.
000031*
000032 SD S001-FILE.
000033 01 S001-RECORD PIC X(80).
000034*
000035 @-L001-FD80
000036 @-L002-FD80
000037*
000038 WORKING-STORAGE SECTION.
000039*
000040 01 WW-PROGRAM-DATE-TIME-STAMP.
000041 03 WW-PROGRAM-DATE-STAMP PIC X(08) VALUE '20020821'.
000042 03 WW-PROGRAM-TIME-STAMP PIC X(08) VALUE '19595062'.
000043 01 WW-PROGRAM-VERSION PIC X(04) VALUE '0049'.
000044*
000045 77 WF-EOF-S001 PIC X(01).
000046 77 WW-RECORDS-READ PIC 9(09).
000047 77 WW-RECORDS-RELEASED PIC 9(09).
000048 77 WW-RECORDS-RETURNED PIC 9(09).
000049 77 WW-RECORDS-WRITTEN PIC 9(09).
000050*
000051 W-GENERAL
000052 W-GENERAL-L001
000053 W-GENERAL-L002
000054 W-DEBUG
000055 W-FILE-STATUS
000056 W-FUNCTION-KEYS
000057*
000058*=================================================================
000059*
000060 PROCEDURE DIVISION.
000061*
000062 0000-MAINLINE SECTION.
000063*
000064 MOVE '0000-MAINLINE' TO WO-MODULE.
000065*
000066 CONTROL-PARAGRAPH.
000067*
000068 MOVE "SORT80" TO WO-PROGRAM.
000069 PERFORM X-INIT-DEBUG.
000070D MOVE "0000-MAINLINE CONTROL-PARAGRAPH" TO WO-DEBUG-MSG.
000071D PERFORM X-DEBUG.
000072*
000073 SORT S001-FILE
000074 ON ASCENDING KEY S001-RECORD
000075 INPUT PROCEDURE 1000-RELEASE-PROCEDURE
000076 OUTPUT PROCEDURE 2000-RETURN-PROCEDURE.
000077*
000078 GO TO Z-TERMINATE.
000079*
000080 EXIT-PARAGRAPH.
000081 EXIT.
000082*
000083*=================================================================
000084*
000085 1000-RELEASE-PROCEDURE SECTION.
000086*
000087 MOVE '1000-RELEASE-PROCEDURE' TO WO-MODULE.
000088*
000089 CONTROL-PARAGRAPH.
000090*
000091******************************************************************
000092**** (1) Reads each record in the input file ****
000093**** (2) For each record, checks if it can be discarded ****
000094**** (3) For non-discards, builds a sort record ****
000095**** using the required fields from the non-discard. ****
000096**** (4) Releases the sort record to the sort file. ****
000097******************************************************************
000098*
000099 PERFORM 1100-INITIALIZE.
000100 PERFORM 1200-READ-NEXT-RECORD UNTIL WF-EOF-L001 = "Y".
000101 PERFORM 1300-FINALIZE.
000102*
000103 EXIT-PARAGRAPH.
000104 EXIT.
000105*
000106*=================================================================
000107*
000108 1100-INITIALIZE SECTION.
000109*
000110 MOVE '1100-INITIALIZE' TO WO-MODULE.
000111*
000112 CONTROL-PARAGRAPH.
000113*
000114 MOVE SPACES TO WW-DOS-LOCN.
000115 ACCEPT WW-DOS-LOCN FROM COMMAND-LINE.
000116 PERFORM X-FULLY-PREFIX-DOS-LOCN.
000117 MOVE WW-DOS-LOCN TO WW-L001-FILE-LOCN.
000118 PERFORM X-OPEN-INPUT-L001.
000119*
000120 MOVE "N" TO WF-EOF-L001.
000121 MOVE ZERO TO WW-RECORDS-READ.
000122 MOVE ZERO TO WW-RECORDS-RELEASED.
000123*
000124 EXIT-PARAGRAPH.
000125 EXIT.
000126*
000127*=================================================================
000128*
000129 1200-READ-NEXT-RECORD SECTION.
000130*
000131 MOVE '1200-READ-NEXT-RECORD' TO WO-MODULE.
000132*
000133 CONTROL-PARAGRAPH.
000134*
000135 PERFORM X-READ-L001.
000136 IF WF-EOF-L001 = "Y"
000137 GO TO EXIT-PARAGRAPH
000138 END-IF.
000139*
000140 ADD 1 TO WW-RECORDS-READ.
000141*
000142 PERFORM 1210-TEST-FOR-DISCARD.
000143 IF WF-DISCARD = "Y"
000144 GO TO EXIT-PARAGRAPH
000145 END-IF.
000146*
000147 PERFORM 1220-SETUP-S001-RECORD.
000148 RELEASE S001-RECORD.
000149*
000150 IF FATAL-ERROR
000151 MOVE "1200-READ-NEXT-RECORD" TO WO-PARAGRAPH
000152 MOVE "RELEASE FAILED!" TO WT-EDL(01)
000153 PERFORM X-SHOW-EXPLANATION
000154 PERFORM X-CLOSE
000155 GO TO Z-TERMINATE
000156 END-IF.
000157*
000158 ADD 1 TO WW-RECORDS-RELEASED.
000159*
000160 EXIT-PARAGRAPH.
000161 EXIT.
000162*
000163*=================================================================
000164*
000165 1210-TEST-FOR-DISCARD SECTION.
000166*
000167 MOVE '1210-TEST-FOR-DISCARD' TO WO-MODULE.
000168*
000169 CONTROL-PARAGRAPH.
000170*
000171 MOVE "N" TO WF-DISCARD.
000172*
000173 EXIT-PARAGRAPH.
000174 EXIT.
000175*
000176*=================================================================
000177*
000178 1220-SETUP-S001-RECORD SECTION.
000179*
000180 MOVE '1220-SETUP-S001-RECORD' TO WO-MODULE.
000181*
000182 CONTROL-PARAGRAPH.
000183*
000184 MOVE L001-RECORD TO S001-RECORD.
000185*
000186 EXIT-PARAGRAPH.
000187 EXIT.
000188*
000189*=================================================================
000190*
000191 1300-FINALIZE SECTION.
000192*
000193 MOVE '1300-FINALIZE' TO WO-MODULE.
000194*
000195 CONTROL-PARAGRAPH.
000196*
000197 PERFORM X-CLOSE-L001.
000198*
000199D MOVE SPACES TO WO-DEBUG-MSG.
000200D STRING
000201D "READ " DEL SIZE
000202D WW-RECORDS-READ DEL SIZE
000203D INTO WO-DEBUG-MSG
000204D END-STRING.
000205D PERFORM X-DEBUG.
000206*
000207D MOVE SPACES TO WO-DEBUG-MSG.
000208D STRING
000209D "RELEASED " DEL SIZE
000210D WW-RECORDS-RELEASED DEL SIZE
000211D INTO WO-DEBUG-MSG
000212D END-STRING.
000213D PERFORM X-DEBUG.
000214*
000215 EXIT-PARAGRAPH.
000216 EXIT.
000217*
000218*=================================================================
000219*
000220 2000-RETURN-PROCEDURE SECTION.
000221*
000222 MOVE '2000-RETURN-PROCEDURE' TO WO-MODULE.
000223*
000224 CONTROL-PARAGRAPH.
000225*
000226******************************************************************
000227**** (1) Returns each record from the sort file ****
000228**** (2) Writes a copy of each record to an output file ****
000229******************************************************************
000230*
000231 PERFORM 2100-INITIALIZE.
000232 PERFORM 2200-RETURN-NEXT-RECORD UNTIL WF-EOF-S001 = "Y".
000233 PERFORM 2300-FINALIZE.
000234*
000235 EXIT-PARAGRAPH.
000236 EXIT.
000237*
000238*=================================================================
000239*
000240 2100-INITIALIZE SECTION.
000241*
000242 MOVE '2100-INITIALIZE' TO WO-MODULE.
000243*
000244 CONTROL-PARAGRAPH.
000245*
000246 MOVE SPACES TO WW-DOS-LOCN.
000247 STRING
000248 WO-PROGRAM DEL SPACES
000249 ".OUT" DEL SIZE
000250 INTO WW-DOS-LOCN
000251 END-STRING.
000252 PERFORM X-FULLY-PREFIX-DOS-LOCN.
000253 MOVE WW-DOS-LOCN TO WW-L002-FILE-LOCN.
000254 PERFORM X-OPEN-OUTPUT-L002.
000255*
000256 MOVE "N" TO WF-EOF-S001.
000257 MOVE ZERO TO WW-RECORDS-WRITTEN.
000258 MOVE ZERO TO WW-RECORDS-RETURNED.
000259*
000260 EXIT-PARAGRAPH.
000261 EXIT.
000262*
000263*=================================================================
000264*
000265 2200-RETURN-NEXT-RECORD SECTION.
000266*
000267 MOVE '2200-RETURN-NEXT-RECORD' TO WO-MODULE.
000268*
000269 CONTROL-PARAGRAPH.
000270*
000271 RETURN S001-FILE
000272 AT END
000273 MOVE "Y" TO WF-EOF-S001
000274 END-RETURN.
000275*
000276 IF WF-EOF-S001 = "Y"
000277 GO TO EXIT-PARAGRAPH
000278 END-IF.
000279*
000280 ADD 1 TO WW-RECORDS-RETURNED.
000281*
000282 IF FATAL-ERROR
000283 MOVE "2200-RETURN-NEXT-RECORD" TO WO-PARAGRAPH
000284 MOVE "RETURN FAILED!" TO WT-EDL(01)
000285 PERFORM X-SHOW-EXPLANATION
000286 PERFORM X-CLOSE
000287 GO TO Z-TERMINATE
000288 END-IF.
000289*
000290 MOVE S001-RECORD TO L002-RECORD.
000291 PERFORM X-WRITE-L002.
000292*
000293 ADD 1 TO WW-RECORDS-WRITTEN.
000294*
000295 EXIT-PARAGRAPH.
000296 EXIT.
000297*
000298*=================================================================
000299*
000300 2300-FINALIZE SECTION.
000301*
000302 MOVE '2300-FINALIZE' TO WO-MODULE.
000303*
000304 CONTROL-PARAGRAPH.
000305*
000306 PERFORM X-CLOSE-L002.
000307*
000308D MOVE SPACES TO WO-DEBUG-MSG.
000309D STRING
000310D "RETURNED " DEL SIZE
000311D WW-RECORDS-RETURNED DEL SIZE
000312D INTO WO-DEBUG-MSG
000313D END-STRING.
000314D PERFORM X-DEBUG.
000315*
000316D MOVE SPACES TO WO-DEBUG-MSG.
000317D STRING
000318D "WRITTEN " DEL SIZE
000319D WW-RECORDS-WRITTEN DEL SIZE
000320D INTO WO-DEBUG-MSG
000321D END-STRING.
000322D PERFORM X-DEBUG.
000323*
000324D MOVE SPACES TO WO-DEBUG-MSG.
000325D STRING
000326D "Output in " DEL SIZE
000327D WW-L002-FILE-LOCN DEL SIZE
000328D INTO WO-DEBUG-MSG
000329D END-STRING.
000330D PERFORM X-DEBUG.
000331*
000332 EXIT-PARAGRAPH.
000333 EXIT.
000334*
000335*=================================================================
000336*
000337 X-CLOSE SECTION.
000338*
000339 CONTROL-PARAGRAPH.
000340*
000341 PERFORM X-CLOSE-L001.
000342 PERFORM X-CLOSE-L002.
000343*
000344 EXIT-PARAGRAPH.
000345 EXIT.
000346+
000347 X-KEY-STATUS
000348 X-FULLY-PREFIX-DOS-LOCN
000349 X-RTS
000350 X-INIT-DEBUG
000351 X-DEBUG
000352 X-FILE-STATUS-MSG
000353 X-SHOW-EXPLANATION
000354 X-DELETE-FILE
000355 X-GET-CURRENT-DRIVE
000356 X-GET-CURRENT-DIR
000357+
000358 X-OPEN-INPUT-L001
000359 X-OPEN-OUTPUT-L001
000360 X-READ-L001
000361 X-WRITE-L001
000362 X-CLOSE-L001
000363+
000364 X-OPEN-INPUT-L002
000365 X-OPEN-OUTPUT-L002
000366 X-READ-L002
000367 X-WRITE-L002
000368 X-CLOSE-L002
000369+
000370 Z-TERMINATE (STOP RUN)
/CODE

Kev from Australia







 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top