輸入文件具有記錄爲: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