COBOL Report Generator |
|
Print graphical COBOL reports in Windows with
RPV Reports.
Insert graphics (images, photos, logos, charts, etc.) into your COBOL reports
to improve the print quality of your COBOL reports.
See how RPV Reports can be used to preview or print graphical COBOL reports in Windows. |
 |
COBOL Documentation |
|
Are your mainframe COBOL applications properly documented?
DCD III
is a comprehensive COBOL documentation and application
understanding tool that will allow you to reduce COBOL maintenance,
development, and mainframe migration costs.
Learn more about how you can document and understand your mainframe COBOL
applications with DCD III. |
 |
COBOL Email List Rental |
|
You can reach a highly targeted, qualified, opt-in audience of
COBOL users by renting the COBUG email list.
Contact us today advertise@cobug.com for our email list rental rates.
|
 |
Website Advertisement |
|
Advertise on the
COBUG website and reach tens of thousands of COBOL users. Increase
your COBOL sales leads.
Contact COBUG at advertise@cobug.com for advertising rates.
|
 |
Support COBUG |
|
 |
|
 |
|
|
| |
|
COBOL Language [
return
] |
|
From |
Message |
twacker
6/10/2011 07:32:30
|
Subject: Randomizing Error
Message: I inherited a program that has the following process in it. The purpose is to create a list of random numbers. We know that there are x records in a file and the program is to select y records from the file. The program is to create a list of y random numbers that represents which records are to be selected. Thus when done, the values of the random number are to be from 1 to x.
Most of the time, the routine works. Once in a while, it selects 1 record less than what is desired. Rerunning the job results in the correct number of records be selected.
The code involved is:
01 WS-SELECT-FILE-KEY PIC 9(08).
01 WS-INCREMENT-BY-ONE-SW PIC X(01).
88 WS-INCREMENT-BY-ONE VALUE 'Y'.
01 WS-WORK-AREAS.
05 WS-SELECT-SEQ-NUM PIC 9(08) VALUE ZEROS.
05 WS-HOLD-TOTAL-CNT PIC 9(08) VALUE ZEROS.
05 WS-MAX-RECORDS PIC 9(03) VALUE ZEROS.
05 SUB PIC 9(04) VALUE ZEROS.
05 WS-SAVE-TABLE-ENTRY PIC 9(04) VALUE ZEROS.
01 WS-RANDOM-TABLE.
05 FILLER OCCURS 999 TIMES.
10 WS-RANDOM-NUMBER PIC 9(09) VALUE ZEROS.
10 WS-RANDOM-NUMBER-X REDEFINES
WS-RANDOM-NUMBER PIC X(09).
01 WS-FIFTEEN-DIGIT-NUMBER PIC 9(15).
01 WS-DUMMY-NUMBER PIC 9(10).
01 WS-RANDOM-SEED3 PIC 9(03).
01 WS-NEW-RANDOM-NUMBER3 REDEFINES WS-RANDOM-SEED3
01 WS-RANDOM-SEED4 PIC 9(04).
01 WS-NEW-RANDOM-NUMBER4 REDEFINES WS-RANDOM-SEED4
01 WS-RANDOM-SEED5 PIC 9(05).
01 WS-NEW-RANDOM-NUMBER5 REDEFINES WS-RANDOM-SEED5
01 WS-RANDOM-SEED6 PIC 9(06).
01 WS-NEW-RANDOM-NUMBER6 REDEFINES WS-RANDOM-SEED6
01 WS-RANDOM-SEED7 PIC 9(07).
01 WS-NEW-RANDOM-NUMBER7 REDEFINES WS-RANDOM-SEED7
01 WS-RANDOM-SEED8 PIC 9(08).
01 WS-NEW-RANDOM-NUMBER8 REDEFINES WS-RANDOM-SEED8
01 SYS-TIME PIC 9(08).
01 SYS-TIME-2 PIC 9(08).
* PRIOR TO THIS, THE FOLLOWING FIELDS ARE SET
* WS-HOLD-TOTAL-CNT CONTAINS THE NUMBER OF RECORDS ON FILE
* WS-MAX-RECORDS CONTAINS THE NUMBER OF RECORDS TO BE SELECTE
PERFORM 6000-RANDOM-SETUP
PERFORM UNTIL WS-SAVE-TABLE-ENTRY NOT <
WS-MAX-RECORDS OR
WS-HOLD-TOTAL-CNT NOT >
WS-SAVE-TABLE-ENTRY - 1
PERFORM 6100-GET-RANDOM-NUMBER
END-PERFORM
6000-RANDOM-SETUP.
MOVE 'N' TO WS-INCREMENT-BY-ONE-SW
INITIALIZE WS-RANDOM-TABLE
WS-SAVE-TABLE-ENTRY
IF WS-HOLD-TOTAL-CNT NOT > WS-MAX-RECORDS
MOVE 0 TO WS-SELECT-FILE-KEY
MOVE 'Y' TO WS-INCREMENT-BY-ONE-SW
ELSE
COMPUTE WS-SELECT-FILE-KEY =
WS-MAX-RECORDS - WS-HOLD-TOTAL-CNT
IF WS-SELECT-FILE-KEY < 11
COMPUTE WS-SELECT-FILE-KEY =
WS-SELECT-FILE-KEY * .5
MOVE 'Y' TO WS-INCREMENT-BY-ONE-SW
ELSE
MOVE WS-HOLD-TOTAL-CNT TO WS-SELECT-FILE-KEY
END-IF
END-IF.
***************************************************************
* CREATE RANDOM NUMBER
***************************************************************
6100-GET-RANDOM-NUMBER.
EVALUATE TRUE
WHEN WS-INCREMENT-BY-ONE
ADD 1 TO WS-SELECT-FILE-KEY
WHEN WS-HOLD-TOTAL-CNT < 1000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED3
MULTIPLY WS-RANDOM-SEED3 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER3
MOVE WS-NEW-RANDOM-NUMBER3 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 10000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED4
MULTIPLY WS-RANDOM-SEED4 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER4
MOVE WS-NEW-RANDOM-NUMBER4 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 100000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED5
MULTIPLY WS-RANDOM-SEED5 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER5
MOVE WS-NEW-RANDOM-NUMBER5 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 1000000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED6
MULTIPLY WS-RANDOM-SEED6 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER6
MOVE WS-NEW-RANDOM-NUMBER6 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN WS-HOLD-TOTAL-CNT < 10000000
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED7
MULTIPLY WS-RANDOM-SEED7 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER7
MOVE WS-NEW-RANDOM-NUMBER7 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
WHEN OTHER
MOVE WS-SELECT-FILE-KEY TO WS-RANDOM-SEED8
MULTIPLY WS-RANDOM-SEED8 BY 16807 GIVING
WS-FIFTEEN-DIGIT-NUMBER
DIVIDE 2147483647 INTO WS-FIFTEEN-DIGIT-NUMBER GIVING
WS-DUMMY-NUMBER REMAINDER WS-NEW-RANDOM-NUMBER8
MOVE WS-NEW-RANDOM-NUMBER8 TO WS-SELECT-FILE-KEY
WS-SELECT-SEQ-NUM
END-EVALUATE .
IF WS-SELECT-FILE-KEY = 0
MOVE 1 TO WS-SELECT-FILE-KEY
END-IF
PERFORM 6150-NEW-KEY-DUP-CHECK.
***************************************************************
* VERIFY THAT THE SAME RANDOM NUMBER ISN'T USED TWICE
***************************************************************
6150-NEW-KEY-DUP-CHECK.
IF WS-HOLD-TOTAL-CNT > WS-MAX-RECORDS
IF WS-SELECT-FILE-KEY NOT < WS-HOLD-TOTAL-CNT
PERFORM 6155-GET-TIME
PERFORM UNTIL WS-SELECT-FILE-KEY <
SYS-TIME
COMPUTE WS-SELECT-FILE-KEY =
WS-SELECT-FILE-KEY -
SYS-TIME
IF WS-SELECT-FILE-KEY < 1
PERFORM 6155-GET-TIME
END-IF
END-PERFORM
END-IF
END-IF.
MOVE 1 TO SUB
PERFORM UNTIL WS-RANDOM-NUMBER (SUB) =
ZERO OR
SUB > 999 OR
WS-SELECT-FILE-KEY =
. . . . . . . . . . . . . . . . . . .
WS-RANDOM-NUMBER (SUB)
ADD 1 TO SUB
END-PERFORM.
IF WS-RANDOM-NUMBER (SUB) = ZEROES
MOVE WS-SELECT-FILE-KEY TO
WS-RANDOM-NUMBER (SUB)
MOVE SUB TO WS-SAVE-TABLE-ENTRY
ELSE
IF NOT WS-INCREMENT-BY-ONE
ACCEPT SYS-TIME FROM TIME
MOVE SYS-TIME TO WS-SELECT-FILE-KEY
END-IF
END-IF.
/**************************************************************
* GET SYSTEM TIME
***************************************************************
6155-GET-TIME.
ACCEPT SYS-TIME FROM TIME.
MOVE SYS-TIME TO SYS-TIME-2
MOVE SYS-TIME-2 TO SYS-TIME
COMPUTE SYS-TIME = SYS-TIME * .50
IF SYS-TIME > WS-HOLD-TOTAL-CNT
PERFORM UNTIL SYS-TIME <
WS-HOLD-TOTAL-CNT
COMPUTE SYS-TIME =
SYS-TIME -
WS-HOLD-TOTAL-CNT
IF SYS-TIME < 1
ACCEPT SYS-TIME FROM TIME
MOVE SYS-TIME TO SYS-TIME-2
MOVE SYS-TIME-2 TO SYS-TIME
COMPUTE SYS-TIME = SYS-TIME * .50
END-IF
END-PERFORM
END-IF.
|
Jens611
6/10/2011 09:31:26
| RE: Randomizing Error
Message: That could be caused by wrong or missing initialization. Check the counters and the records.
|
|
|
|
|
|
|
|
|
|
|
[ Go to Top of Page ]
|
|
 |
|
COBOL Job Seekers |
Looking for a COBOL job? Submit your resume here and have it viewed by employers and recruiters hiring for COBOL positions.
|
 |
|
Employers & Recruiters |
Do you need to fill a COBOL position? Post your COBOL jobs here and find the most qualified COBOL candidates to fill your COBOL position.
|
 |
|
Call for Articles |
Articles are being sought for the COBUG newsletters.
Will you help us in our efforts to provide newsletters for the COBOL community at large?
Contribute to the COBUG newsletters! Answer this call for COBOL and related legacy articles. |
 |
|
Local COBOL User Groups |
Check out the list of local COBOL user groups from around the world and join a user group near you.
|
 |
|
Call for User Group Leaders! |
Get Involved! We are looking for user group
leaders to help organize and coordinate a local COBOL user group.
|
 |
|
Join COBUG! |
Become a part of the COBUG community today.
Join Now ...
|
 |
|
COBOL Forums |
Try our forums for help!
Let the COBUG members help you.
Post your issues!
|
 |
|