Loops 在COBOL中执行直到循环只读取一次,然后在条件仍然为false的情况下中断
对COBOL来说还是很新的。我有一个简单的程序,它运行读取一个文件,然后读取该文件的内容并将其格式化为另一个文件。我的主要问题在于,出于某种原因,我的模块将测试条件,看它是否为false,然后执行其中的语句。之后,它将在不改变条件的情况下重复该过程,然后终止程序。根据调试器的说法,它甚至没有运行最后一个模块200-TERM-RECORD,它只是结束了 这是程序的代码Loops 在COBOL中执行直到循环只读取一次,然后在条件仍然为false的情况下中断,loops,debugging,cobol,terminate,Loops,Debugging,Cobol,Terminate,对COBOL来说还是很新的。我有一个简单的程序,它运行读取一个文件,然后读取该文件的内容并将其格式化为另一个文件。我的主要问题在于,出于某种原因,我的模块将测试条件,看它是否为false,然后执行其中的语句。之后,它将在不改变条件的情况下重复该过程,然后终止程序。根据调试器的说法,它甚至没有运行最后一个模块200-TERM-RECORD,它只是结束了 这是程序的代码 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL
SELECT INVENT-FILE-IN
ASSIGN TO "C:\TEST.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT INVENT-REPORT-OUT
ASSIGN TO "C:\INVREPT.TXT"
ORGANIZATION IS LINE SEQUENTIAL.
data division.
FILE SECTION.
FD INVENT-FILE-IN
RECORD CONTAINS 32 CHARACTERS.
01 INVENTORY-DATA-INPUT
05 PART-NUMBER-INPUT PIC 9(5)
05 PART-NAME-INPUT PIC X(20)
05 QUANTITY-ON-HAND-INPUT PIC 9(3)
05 UNIT-PRICE-INPUT PIC 9(4)
FD INVENT-REPORT-OUT
RECORD CONTAINS 77 CHARACTERS.
01 INVENTORY-DATA-OUTPUT
05 HEADER
10 PRODUCT-NUMBER PIC A(6)
10 FILLER PIC A(1)
10 PRODUCT-NAME PIC A(8)
10 FILLER PIC A(16)
10 PRODUCT-QTY PIC A(3)
10 FILLER PIC A(3)
10 PRODUCT-VALUE PIC A(5)
10 FILLER PIC A(3)
05 PART-NUMBER-OUTPUT PIC 9(5)
05 PART-NAME-OUTPUT PIC X(20)
05 QUANTITY-ON-HAND-OUTPUT PIC 9(3)
05 UNIT-PRICE-OUTPUT PIC 9(4)
05 SUPPLIER-CODE-OUTPUT PIC X(5)
05 RE-ORDER-POINT-OUTPUT PIC 9(3)
05 RECORD-COUNTER-OUTPUT PIC 9(2)
working-storage section.
01 VALUES-AND-TOTALS
05 EOF-SWITCH PIC X(1) VALUE "N"
05 TOTAL-VALUE PIC 9(6) VALUE ZERO
05 INVENTORY-VALUE PIC 9(6) VALUE ZERO
05 RECORD-COUNTER PIC 9(2) VALUE ZERO
procedure division.
100-CREATE-INVENTORY-RECORD.
PERFORM 200-INIT-CREATE-INV-RECORD.
PERFORM 200-CREATE-RECORD
UNTIL EOF-SWITCH = "Y".
PERFORM 200-TERM-RECORD.
200-INIT-CREATE-INV-RECORD.
PERFORM 700-OPEN-INV-FILE.
PERFORM 700-READ-FILE.
200-CREATE-RECORD.
PERFORM 700-WRITE-RECORD.
PERFORM 700-READ-FILE.
200-TERM-RECORD.
CLOSE INVENT-FILE-IN.
CLOSE INVENT-REPORT-OUT.
700-OPEN-INV-FILE.
OPEN INPUT INVENT-FILE-IN.
OPEN OUTPUT INVENT-REPORT-OUT.
700-READ-FILE.
READ INVENT-FILE-IN
AT END MOVE "Y" TO EOF-SWITCH.
700-WRITE-RECORD.
MOVE PART-NUMBER-INPUT TO PART-NUMBER-OUTPUT.
MOVE PART-NAME-INPUT TO PART-NAME-OUTPUT.
MOVE QUANTITY-ON-HAND-INPUT TO QUANTITY-ON-HAND-OUTPUT.
MOVE UNIT-PRICE-INPUT TO UNIT-PRICE-OUTPUT.
WRITE INVENTORY-DATA-OUTPUT.
goback.
end program Project2.
您的代码流(从100开始创建)是:
- 200初始化
- 700开
- 700读
- 200创建
- 700写入->返回
部分
,并且只在主部分
或从主部分调用的prog end部分
中使用GOBACK
。您的代码流(从100创建开始)是:
- 200初始化
- 700开
- 700读
- 200创建
- 700写入->返回
不涉及循环
大体上
我建议使用部分
,并且只在主部分
或从主部分调用的prog end部分
中使用GOBACK
。将GOBACK
语句从程序末尾移到第一段末尾
在700-WRITE-RECORD
中,当控件到达goback
语句时,程序终止。您可能希望程序在100-CREATE-INVENTORY-RECORD
末尾终止,将goback
语句从程序末尾移动到第一段末尾
在700-WRITE-RECORD
中,当控件到达goback
语句时,程序终止。您可能希望程序在100-CREATE-INVENTORY-RECORD
结束时终止