85 lines
2.9 KiB
COBOL
85 lines
2.9 KiB
COBOL
* HINA001 - 1:1 マッチング
|
|
>>SOURCE FORMAT IS FREE
|
|
* 2入力ファイル(R01/R02)をキー一致でマージ
|
|
* 期待: 2ファイル, 3 IF, 6 分岐, ~5 段落
|
|
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. HINA001.
|
|
ENVIRONMENT DIVISION.
|
|
INPUT-OUTPUT SECTION.
|
|
FILE-CONTROL.
|
|
SELECT R01-FILE ASSIGN TO "R01.DAT"
|
|
ORGANIZATION IS LINE SEQUENTIAL.
|
|
SELECT R02-FILE ASSIGN TO "R02.DAT"
|
|
ORGANIZATION IS LINE SEQUENTIAL.
|
|
SELECT W01-FILE ASSIGN TO "W01.DAT"
|
|
ORGANIZATION IS LINE SEQUENTIAL.
|
|
DATA DIVISION.
|
|
FILE SECTION.
|
|
FD R01-FILE.
|
|
01 R01-REC PIC X(30).
|
|
FD R02-FILE.
|
|
01 R02-REC PIC X(30).
|
|
FD W01-FILE.
|
|
01 W01-REC PIC X(60).
|
|
WORKING-STORAGE SECTION.
|
|
01 WS-R01-KEY PIC X(10).
|
|
01 WS-R02-KEY PIC X(10).
|
|
01 WS-R01-DATA PIC X(20).
|
|
01 WS-R02-DATA PIC X(20).
|
|
01 WS-EOF1 PIC X VALUE 'N'.
|
|
88 R01-EOF VALUE 'Y'.
|
|
01 WS-EOF2 PIC X VALUE 'N'.
|
|
88 R02-EOF VALUE 'Y'.
|
|
PROCEDURE DIVISION.
|
|
0000-MAIN.
|
|
OPEN INPUT R01-FILE R02-FILE.
|
|
OPEN OUTPUT W01-FILE.
|
|
PERFORM 1000-READ-R01.
|
|
PERFORM 2000-READ-R02.
|
|
PERFORM 3000-MATCH UNTIL R01-EOF AND R02-EOF.
|
|
CLOSE R01-FILE R02-FILE W01-FILE.
|
|
STOP RUN.
|
|
1000-READ-R01.
|
|
READ R01-FILE INTO R01-REC
|
|
AT END MOVE 'Y' TO WS-EOF1
|
|
NOT AT END PERFORM 1100-PARSE-R01.
|
|
1100-PARSE-R01.
|
|
MOVE R01-REC(1:10) TO WS-R01-KEY.
|
|
MOVE R01-REC(11:20) TO WS-R01-DATA.
|
|
2000-READ-R02.
|
|
READ R02-FILE INTO R02-REC
|
|
AT END MOVE 'Y' TO WS-EOF2
|
|
NOT AT END PERFORM 2100-PARSE-R02.
|
|
2100-PARSE-R02.
|
|
MOVE R02-REC(1:10) TO WS-R02-KEY.
|
|
MOVE R02-REC(11:20) TO WS-R02-DATA.
|
|
3000-MATCH.
|
|
IF R01-EOF THEN
|
|
PERFORM 4000-WRITE-R02-ONLY
|
|
PERFORM 2000-READ-R02
|
|
ELSE IF R02-EOF THEN
|
|
PERFORM 5000-WRITE-R01-ONLY
|
|
PERFORM 1000-READ-R01
|
|
ELSE IF WS-R01-KEY < WS-R02-KEY THEN
|
|
PERFORM 5000-WRITE-R01-ONLY
|
|
PERFORM 1000-READ-R01
|
|
ELSE IF WS-R01-KEY > WS-R02-KEY THEN
|
|
PERFORM 4000-WRITE-R02-ONLY
|
|
PERFORM 2000-READ-R02
|
|
ELSE
|
|
PERFORM 6000-WRITE-MATCH
|
|
PERFORM 1000-READ-R01
|
|
PERFORM 2000-READ-R02.
|
|
4000-WRITE-R02-ONLY.
|
|
STRING WS-R02-KEY WS-R02-DATA DELIMITED BY SIZE
|
|
INTO W01-REC.
|
|
WRITE W01-REC.
|
|
5000-WRITE-R01-ONLY.
|
|
STRING WS-R01-KEY WS-R01-DATA DELIMITED BY SIZE
|
|
INTO W01-REC.
|
|
WRITE W01-REC.
|
|
6000-WRITE-MATCH.
|
|
STRING WS-R01-KEY WS-R01-DATA WS-R02-DATA
|
|
DELIMITED BY SIZE INTO W01-REC.
|
|
WRITE W01-REC.
|