Embed
Email

Ch7

Document Sample

Shared by: xiuliliaofz
Categories
Tags
Stats
views:
2
posted:
10/22/2011
language:
Chinese
pages:
22
COBOL for Mainframe

Fundamentals







Ch7 文件I/O处理

文件处理

 ENVIRONMENT DIVISION

 INPUT-OUTPUT SECTION.

 FILE-CONTROL.



 DATA DIVISION

 FILE SECTION.

 FD



 PROCEDURE DIVISION

 OPEN

 CLOSE

 READ

 WRITE

 REWRITE :替换一个记录.

 DELETE :删除一个记录.

 START :定位到关系文件或索引文件中的一个记录,顺序访问从该位置开

始.

ENVIRONMENT DIVISION

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT [optional] file-name

ASSIGN TO ddname

[ORGINAZATION IS SEQUENTIAL|INDEXED|RELATIVE]

[ACCESS MODE IS SEQUENTIAL|RANDOM|DYNAMIC]

[RECORD KEY IS identifier-1]

[ALTERNATE RECORD KEY IS identifier-2]

[FILE STATUS IS identifier-3]



FILE STATUS 是两位数字,标志文件的状态, 例如:

00 成功 10 读到文件尾 30 I/O 错误…

可以找到一个数组,包含26种状态的相信信息.

例子



ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT INFILE ASSIGN TO FILE1

FILE STATUS IS FS1.

SELECT OUTFILE ASSIGN TO FILE2

FILE STATUS IS FS2.



INFILE 在FILE SECTION里定义

FILE1 是 JCL 里用到的ddname

FS1 在WORKING-STORAGE SECTION里定义

DATA DIVISION

DATA DIVISION.

FILE SECTION.

FD file-name

[RECORD MODE IS F|V]

[BLOCK CONTAINS n RECORDS]

[RECORD CONTAINS n CHARACTERS]

*下面定义的是该文件的记录缓冲器(Record Buffer),是内存与外部

*文件的唯一通道和桥梁。它的结构必须和文件中的单条记录吻合。

01 data-item-name.

05….

05….

例子

DATA DIVISION

FILE SECTION.

FD INFILE.

01 INREC.

05 USERID PIC X(10).

05 FILLER PIC X.

05 PWD PIC X(10).

01 OUTREC.

05 USERID PIC X(10).

05 FILLER PIC X.

05 RESULT PIC X(10).

...

WORKING-STORAGE SECTION.

01 WK-AREA PIC X(21).

01 FS1 PIC 9(2).

01 FS2 PIC 9(2).

OPEN 语句



 语法:

OPEN INPUT|OUTPUT|I-O|EXTEND file-name-1, file-name-2.





 例子:

OPEN INPUT INFILE1 INFILE2.

OPEN OUTPUT OUTFILE.



 什么时候用 INPUT, OUTPUT, 或I-O?

CLOSE 语句

 语法:

CLOSE file-name-1, file-name-2,…

[WITH LOCK],如果选用,则一个程序中同一个文件只能被打开一次.





 例子:

CLOSE INFILE1 INFILE2.

CLOSE OUTFILE.

READ 语句

 语法:

READ file-name-1 [NEXT] [RECORD]

[INTO identifier-1]

[AT END statement-1]

[NOT AT END statement-2]

[END-READ]



 例子:

READ INFILE

AT END MOVE 'Y' TO FLAG

END-READ.



READ INFILE INTO WK-AREA.

WRITE 语句

 语法:

WRITE date-item-1

[FROM identifier-1]

[BEFORE|AFTER ADVANCING [n LINE|LINES]|[PAGE]]

[END-WRITE]





 例子:

WRITE OUTREC.

WRITE OUTREC FROM WK-AREA.

WRITE OUTREC AFTER ADVANCING 2 LINES.

REWRITE 语句

 如果设备支持记录替换,则用于替换一个记录。之前必须有一次成功

读取.

 语法:

REWRITE date-item-1

[FROM identifier-1]

[END-REWRITE]

 例子:

OPEN I-O INFILE. (only when the file is opened as I-O,you can use rewrite in the following)

...

PERFORM UNTIL FLAG = 'Y'

READ INFILE

AT END MOVE 'Y' TO FLAG

END-READ

IF FS1 NOT = 00 AND FS1 NOT = 10 (should be FS1 = 00 )

THEN

MOVE SPACES TO PWD

REWRITE INREC

IF FS1 NOT = 00

THEN

DISPLAY 'REWRITE ERROR'

END-IF

END-IF

END-PERFORM

文件排序与合并

 所有的排序和合并文件都是临时文件. 这些临时文件在FILE

SECTION 由SD 定义。



 排序与合并的输出可以写到一个文件里,也可以只是在程序中

处理。

ENVIRONMENT DIVISION

ENVIRONMENT DIVISION.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT sort-file ASSIGN TO assign-name.

DATA DIVISION

DATA DIVISION.

FILE SECTION.

SD sort-file

[RECORD CONTAINS n1 [TO n2 ] CHARACTERS]

01 sort-rec.

05…

05…

PROCEDURE DIVISION



 SORT 语句



 MERGE 语句



 RELEASE 语句 (类似与真实文件的 WRITE )



 RETURN 语句 (类似于真实文件的 READ)

SORT 语句

SORT sort-file

{ ON ASCENDING | DESCENDING KEY { identifier-1} }

[WITH DUPLICATE IS ORDER]



INPUT PROCEDURE IS proc-name-1 [THRU proc-name-2]



USING { file-name-1 }



OUTPUT PROCEDURE IS proc-name-3 [THRU proc-name-4]



GIVING { file-name-2 }

RELEASE 语句

 语法:

RELEASE sort-rec [FROM identifier]

RETURN 语句

 语法:

RETURN sort-file RECORD [ INTO identifier]

[AT END statement-1]

[NOT AT END statement-2]

[END-RETURN]

MERGE 语句

MERGE sort-file

{ ON ASCENDING | DESCENDING KEY { identifier-1} }



USING { file-name-1, file-name-2 }



OUTPUT PROCEDURE IS proc-name-3 [THRU proc-name-4]



GIVING { file-name-2 }

例子 1

FD SalesFile.

01 SalesRec.

02 FILLER PIC X(10).

SD WorkFile.

01 WorkRec.

02 WSalesmanNum PIC 9(5).

02 FILLER PIC X(5).

FD SortedSalesFile.

01 SortedSalesRec.

02 SalesmanNum PIC 9(5).

02 ItemType PIC X.

02 QtySold PIC 9(4).

PROCEDURE DIVISION.

Begin.

SORT WorkFile ON ASCENDING KEY WSalesmanNum

USING SalesFile

GIVING SortedSalesFile.

...

输入程序

 例子

FD SalesFile.

01 SalesRec. SelectHatSales.

88 EndOfSales VALUE HIGH-VALUES. OPEN INPUT SalesFile

02 FILLER PIC 9(5). READ SalesFile

02 FILLER PIC X. AT END SET EndOfSales TO TRUE

88 HatRecord VALUE 'H'. END-READ

02 FILLER PIC X(4).

PERFORM UNTIL EndOfSales

SD WorkFile.

IF HatRecord

01 WorkRec.

02 WSalesmanNum PIC 9(5). RELEASE WorkRec FROM SalesRec

02 FILLER PIC X(5). END-IF

FD SortedSalesFile. READ SalesFile

01 SortedSalesRec. AT END SET EndOfSales TO TRUE

02 SalesmanNum PIC 9(5). END-READ

02 ItemType PIC X. END-PERFORM

02 QtySold PIC 9(4). CLOSE SalesFile.

PROCEDURE DIVISION.

Begin.

SORT WorkFile

ON ASCENDING KEY WSalesmanNum

INPUT PROCEDURE IS SelectHatSales

GIVING SortedSalesFile.

输出程序

 例子

FD SalesFile.

SummariseSales.

01 SalesRec PIC X(10).

OPEN OUTPUT SalesSummaryFile

SD WorkFile.

01 WorkRec. RETURN WorkFile

88 EndOfWorkFile AT END SET EndOfWorkFile TO TRUE

VALUE HIGH-VALUES. END-RETURN

02 WSalesmanNum PIC 9(5). PERFORM UNTIL EndOfWorkFile

02 FILLER PIC X. MOVE WSalesmanNum TO SalesmanNum

02 WQtySold PIC X(4). MOVE ZEROS TO TotalQtySold

PERFORM UNTIL WSalesManNum NOT =

FD SalesSummaryFile. SalesmanNum

01 SummaryRec. OR EndOfWorkFile

02 SalesmanNum PIC 9(5). ADD WQtySold TO TotalQtySold

02 TotalQtySold PIC 9(6). RETURN WorkFile

PROCEDURE DIVISION. AT END SET EndOfWorkFile TO TRUE

Begin. END-RETURN

SORT WorkFile END-PERFORM

ON ASCENDING KEY WSalesmanNum WRITE SummaryRec

USING SalesFile END-PERFORM

OUTPUT PROCEDURE

CLOSE SalesSummaryFile.

IS SummariseSales.

OPEN INPUT SalesSummaryFile.

PERFORM PrintSummaryReport.



Related docs
Other docs by xiuliliaofz
March 08 Concussion BIggg.pub
Views: 0  |  Downloads: 0
Pro_CV_Wadud
Views: 0  |  Downloads: 0
NSF-DMP_EAR_UvaTemplate with Guidance
Views: 0  |  Downloads: 0
MicroficheList04
Views: 0  |  Downloads: 0
Report - by Incheon
Views: 0  |  Downloads: 0
21_B2_U10A
Views: 0  |  Downloads: 0
EOC EFCOG 2006
Views: 0  |  Downloads: 0
2010 budget
Views: 0  |  Downloads: 0
PS20090413 NYIPG2 only _2_
Views: 1  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!