我不知道为什么我的填充空间没有显示在我的COBOL应用程序中

问题描述 投票:1回答:1

[好,所以我正在为学校准备这个应用程序,它要求从.txt文件读取的条目之间必须有一定的间距格式。我已经使用填充词创建了标题,并且间距工作得很好,但是当我对从.txt导入的记录格式应用相同的方法时,它似乎不起作用。我已经在阳光下尝试了所有方法,但无法使其始终有效!

这是现在的输出:

PARTNUMBER  PARTNAME     QUANTITY  VALUE

1111111screws robertson 10 43210200Ajax          
2222222screws robertson 08 41000100Ajax          
2222233screws robertson 06 43210200Ajax          
3333333screws robertson 04 41000100Ajax          
4444444bolts dead 10       43210200Robo          
5555555bolts dead 80       01000100Robo     

但是,应该是这样的:

PARTNUMBER PARTNAME     QUANTITY  VALUE

1111111   screws robertson 10     43210200 Ajax          
2222222   screws robertson 08     41000100 Ajax          
2222233   screws robertson 06     43210200 Ajax          
3333333   screws robertson 04     41000100 Ajax          
4444444   bolts dead       10     43210200 Robo          
5555555   bolts dead.      80     01000100 Robo     

下面是我认为需要实现此功能的代码,但是我仍然不确定为什么它不起作用

 FILE SECTION.
   FD  INVENT-FILE-IN.
   01  INVENT-RECORD-IN PIC X(49).


   WORKING-STORAGE SECTION.
   01  DISPLAY-HEADERS.
       05  DISPLAY-PART-NUMBER PIC A(11)
           VALUE "PARTNUMBER".
       05  FILLER              PIC X(1).
       05  DISPLAY-PART-NAME   PIC A(9)
           VALUE "PARTNAME".
       05  FILLER              PIC X(4). 
       05  DISPLAY-QUANTITY    PIC A(8)
           VALUE  "QUANTITY".
       05  FILLER              PIC X(2).
       05  DISPLAY-VALUE       PIC A(5)      
           VALUE "VALUE".

   01  DISPLAY-RECORDS.
       05  WS-INVENTORY-PART-NUMBER   PIC 9(7).
       05  FILLER                     PIC X(4) VALUE SPACES.
       05  WS-INVENTORY-PART-NAME     PIC X(20).
       05  FILLER                     PIC X(4) VALUE SPACES.
       05  WS-INVENTORY-QUANTITY      PIC 9(4).
       05  FILLER                     PIC X(2) VALUE SPACES.
       05  WS-INVENTORY-VALUE         PIC 9(8).
       05  FILLER                     PIC X(1) VALUE SPACES.
       05  WS-INVENTORY-SUPPLIER-CODE PIC X(5). 
   PROCEDURE DIVISION.
   100-PROCESS-INVENTORY-FILE.
       PERFORM  201-OPEN-INVENT-FILE.
       PERFORM  202-DISPLAY-HEADER.
       PERFORM  204-INPUT-INVENT-FILE
       PERFORM  206-DISPLAY-RECORDS
                     UNTIL EOF-SWITCH = "Y".
       PERFORM  205-TERMINATE-INVENTORY-FILE.
       STOP RUN.

   201-OPEN-INVENT-FILE.
       OPEN INPUT INVENT-FILE-IN.

   202-DISPLAY-HEADER.
       DISPLAY DISPLAY-HEADERS.


   206-DISPLAY-RECORDS.
       MOVE INVENT-RECORD-IN TO DISPLAY-RECORDS.
       DISPLAY DISPLAY-RECORDS.

       READ INVENT-FILE-IN
           AT END 
               MOVE "Y" TO EOF-SWITCH
           NOT AT END
               COMPUTE READ-COUNTER = READ-COUNTER + 1
       END-READ.

   204-INPUT-INVENT-FILE.
       READ INVENT-FILE-IN
           AT END 
               MOVE "Y" TO EOF-SWITCH
           NOT AT END
               COMPUTE READ-COUNTER = READ-COUNTER + 1
       END-READ.

   205-TERMINATE-INVENTORY-FILE.
       CLOSE  INVENT-FILE-IN.
cobol spacing
1个回答
3
投票

如注释中先前所述,在第206-DISPLAY-RECORDS段中,您正在将整个输入记录移至DISPLAY-RECORDS。

这里的问题是您的输入记录的格式与输出记录的格式不同。这只是意味着您必须自己格式化。最简单的方法是不同地定义输入输入记录。这样的事情应该可以解决问题:

 FILE SECTION.
   FD  INVENT-FILE-IN.
   01  INVENT-RECORD-IN.
       05  INVENT-PART-NUMBER   PIC 9(7).
       05  INVENT-PART-NAME     PIC X(20).
       05  INVENT-QUANTITY      PIC 9(4).
       05  INVENT-VALUE         PIC 9(8).
       05  INVENT-SUPPLIER-CODE PIC X(5). 

从这里开始,就像将这些字段移动到显示记录中的相应位置一样容易:

   206-DISPLAY-RECORDS.
       MOVE INVENT-PART-NUMBER   TO WS-INVENTORY-PART-NUMBER   
       MOVE INVENT-PART-NAME     TO WS-INVENTORY-PART-NAME
       MOVE INVENT-QUANTITY      TO WS-INVENTORY-QUANTITY
       MOVE INVENT-VALUE         TO WS-INVENTORY-VALUE
       MOVE INVENT-SUPPLIER-CODE TO WS-INVENTORY-SUPPLIER-CODE 

       READ INVENT-FILE-IN
           AT END 
               MOVE "Y" TO EOF-SWITCH
           NOT AT END
               COMPUTE READ-COUNTER = READ-COUNTER + 1
       END-READ.
© www.soinside.com 2019 - 2024. All rights reserved.