Loops 在COBOL中执行直到循环只读取一次,然后在条件仍然为false的情况下中断

Loops 在COBOL中执行直到循环只读取一次,然后在条件仍然为false的情况下中断,loops,debugging,cobol,terminate,Loops,Debugging,Cobol,Terminate,对COBOL来说还是很新的。我有一个简单的程序,它运行读取一个文件,然后读取该文件的内容并将其格式化为另一个文件。我的主要问题在于,出于某种原因,我的模块将测试条件,看它是否为false,然后执行其中的语句。之后,它将在不改变条件的情况下重复该过程,然后终止程序。根据调试器的说法,它甚至没有运行最后一个模块200-TERM-RECORD,它只是结束了 这是程序的代码 ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL

对COBOL来说还是很新的。我有一个简单的程序,它运行读取一个文件,然后读取该文件的内容并将其格式化为另一个文件。我的主要问题在于,出于某种原因,我的模块将测试条件,看它是否为false,然后执行其中的语句。之后,它将在不改变条件的情况下重复该过程,然后终止程序。根据调试器的说法,它甚至没有运行最后一个模块200-TERM-RECORD,它只是结束了

这是程序的代码

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
结束时终止