输入文件具有记录为:8712351,8712353,8712353,8712354,8712356,8712352,8712355 8712352,8712355如何使用COBOL从文件中删除重复项?
使用COBOL我需要从上述文件删除重复并写入到一个输出文件中。 I 写了简单的逻辑来读取记录并写入输出文件。
我需要从上述文件中删除重复项(例如8712353,8712352)的逻辑。下面是程序逻辑:
IDENTIFICATION DIVISION.
PROGRAM-ID.RemoveDup.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUTFILEDUP ASSIGN TO 'C:\Cobol\INPUTFILEDUP.txt'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUTFILEDUP ASSIGN TO 'C:\Cobol\OUTFILEDUP.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD INPUTFILEDUP.
01 INPUTFILEDUPREC.
88 EOFINPUTFILEDUP VALUE HIGH-VALUES.
02 INPUTFILEID PIC 9(07).
FD OUTFILEDUP.
01 OUTFILEDUPREC PIC 9(07).
WORKING-STORAGE SECTION.
77 WS-VARIABLE PIC 9(09).
77 REC-NOT-MATCH PIC 9(01).
77 CUR-VARIABLE PIC 9(09).
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT INPUTFILEDUP
OPEN OUTPUT OUTFILEDUP
READ INPUTFILEDUP
AT END SET EOFINPUTFILEDUP TO TRUE
END-READ
PERFORM UNTIL (EOFINPUTFILEDUP)
WRITE OUTFILEDUPREC FROM INPUTFILEID
READ INPUTFILEDUP
AT END SET EOFINPUTFILEDUP TO TRUE
PERFORM UNTIL (EOFINPUTFILEDUP)
END-READ
END-PERFORM
CLOSE INPUTFILEDUP
CLOSE OUTFILEDUP
STOP RUN.
我按升序排序的输入文件:8712351,8712353,8712353,8712354,8712356,8712352,8712355,8712352,8712355 和它的工作,下面是修改后的代码:
但是,假设我的文件没有升序或降序,我需要在删除dups之前编写排序逻辑。请你能更新我下面的代码这是我试过,但没有全成在做这个,如果输入FIEL结构是这样的:
8712351,8712353,8712353,8712354,8712356,8712352,8712355,8712352,8712355
IDENTIFICATION DIVISION.
PROGRAM-ID.RemoveDup2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUTFILEDUP ASSIGN TO 'C:\Cobol\INPUTFILEDUP.txt'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT OUTFILEDUP ASSIGN TO 'C:\Cobol\OUTFILEDUP.txt'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD INPUTFILEDUP.
01 INPUTFILEDUPREC.
88 EOFINPUTFILEDUP VALUE HIGH-VALUES.
02 INPUTFILEID PIC 9(07).
FD OUTFILEDUP.
01 OUTFILEDUPREC PIC 9(07).
WORKING-STORAGE SECTION.
77 WS-VARIABLE PIC 9(09) VALUE ZERO.
77 REC-NOT-MATCH PIC 9(01).
77 CUR-VARIABLE PIC 9(7) VALUE ZERO.
PROCEDURE DIVISION.
BEGIN.
OPEN INPUT INPUTFILEDUP
OPEN OUTPUT OUTFILEDUP
READ INPUTFILEDUP
AT END SET EOFINPUTFILEDUP TO TRUE
END-READ
PERFORM UNTIL (EOFINPUTFILEDUP)
IF INPUTFILEID NOT EQUAL TO WS-VARIABLE
MOVE INPUTFILEID TO WS-VARIABLE
WRITE OUTFILEDUPREC FROM INPUTFILEID
READ INPUTFILEDUP
AT END SET EOFINPUTFILEDUP TO TRUE
PERFORM UNTIL (EOFINPUTFILEDUP)
ELSE
DISPLAY "dUPLICATE FOUND" INPUTFILEID
READ INPUTFILEDUP
AT END SET EOFINPUTFILEDUP TO TRUE
END-READ
END-PERFORM
CLOSE INPUTFILEDUP
CLOSE OUTFILEDUP
STOP RUN.
WOW新的最喜欢的标签! :)关于从中删除重复项的数据的问题:8712351等数字是否都会在相对紧凑的范围内发生,例如8700000-8800000?或者是否有可能在一个巨大的范围内从1-N变化的数字? – 2009-11-18 19:10:46