2011-01-27 38 views
0

我似乎还有另一个问题处理COBOL。我的老师已经指派我们不得不取一个名字的文件,并把它分成两列,往下54行。我认为这会很简单,因为我在书中看起来很简单,因为它或多或少地使用了一个新功能来完成我已经做好的所有工作,但是一旦我回到家并放下我的代码,它就会变得非常糟糕。由于某种原因,我所做的程序只能在第一行的第一列中写入一个名称,并且在第54行中只写入一个名称。我显然处于错误的轨道上,但在我看来它看起来是正确的。这是我得到的:发生和下标

WORKING-STORAGE SECTION. 
    01 ARE-THERE-MORE-RECORDS    PIC X(3) VALUE 'YES'. 

    01 REPORT-START      PIC X  VALUE 'Y'. 

    01 LINE-COUNT       PIC 99 VALUE ZEROS. 

    01 PAGE-NUMBER       PIC 99 VALUE ZEROS. 

    01 NAME-COUNT       PIC 9(3) VALUE ZEROS. 

    01 WORK-AREA-1. 
     05 N-COLUMN-1      PIC 99 VALUE ZEROS. 

    01 WORK-AREA-2. 
     05 N-COLUMN-2      PIC 9(3) VALUE 54. 

    01 NAME-STORAGE. 
     05 NAME-STO OCCURS 108 TIMES PIC X(30). 

    01 WS-DATE. 
     05 RUN-YEAR      PIC XX. 
     05 RUN-MONTH      PIC XX. 
     05 RUN-DAY       PIC XX. 

    01 HEADING-LINE-1. 
     05         PIC X(32) VALUE SPACES. 
     05         PIC X(16) 
      VALUE 'NAME LIST REPORT'. 
     05         PIC X(6) VALUE SPACES. 
     05 HL-1-DATE. 
      10 MONTH-2      PIC XX. 
      10        PIC X  VALUE '/'. 
      10 DAY-2      PIC XX. 
      10        PIC X  VALUE '/'. 
      10 YEAR-2      PIC XX. 
     05         PIC X(4) VALUE SPACES. 
     05 PAGE-1       PIC X(4) VALUE 'PAGE'. 
     05         PIC X(1) VALUE SPACES. 
     05 NUMBER-PAGE      PIC Z9. 

    01 DETAIL-LINE. 
     05 BLANK-A-OUT      PIC X(4) VALUE SPACES. 
     05 DL-COLUMN-1      PIC X(30). 
     05 BLANK-E-OUT      PIC X(20) VALUE SPACES. 
     05 DL-COLUMN-2      PIC X(30). 

    PROCEDURE DIVISION. 
    100-MAIN. 
     OPEN INPUT NAMELIST-FILE-IN 
     OPEN OUTPUT NAMELIST-FILE-OUT 

     ACCEPT WS-DATE FROM DATE 
     MOVE RUN-MONTH TO MONTH-2 
     MOVE RUN-DAY TO DAY-2 
     MOVE RUN-YEAR TO YEAR-2 

     PERFORM 200-NEXT-PAGE 

     PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO ' 
      READ NAMELIST-FILE-IN 
       AT END 
        MOVE 'NO ' TO ARE-THERE-MORE-RECORDS 
       NOT AT END 
        PERFORM 300-STORE-NAME 
      END-READ 
     END-PERFORM 

     CLOSE NAMELIST-FILE-IN 
     CLOSE NAMELIST-FILE-OUT 
     STOP RUN. 

    200-NEXT-PAGE. 
     ADD 1 TO PAGE-NUMBER 
     MOVE PAGE-NUMBER TO NUMBER-PAGE 
     MOVE HEADING-LINE-1 TO NAMELIST-RECORD-OUT 
     IF REPORT-START = 'N' 
      WRITE NAMELIST-RECORD-OUT 
       AFTER ADVANCING PAGE 
     ELSE 
      MOVE 'N' TO REPORT-START 
      WRITE NAMELIST-RECORD-OUT 
       AFTER ADVANCING 1 LINE 
     END-IF. 
     MOVE ZEROS TO LINE-COUNT. 

    300-STORE-NAME. 
     ADD 1 TO NAME-COUNT 
     MOVE NAME-IN TO NAME-STORAGE 
     IF NAME-COUNT > 54 
      PERFORM 400-PROCESS-FILE 
     END-IF. 

    400-PROCESS-FILE. 
     IF LINE-COUNT >= 52 
      PERFORM 200-NEXT-PAGE 
     END-IF 
     ADD 1 TO LINE-COUNT 
     ADD 1 TO N-COLUMN-1 
     ADD 1 TO N-COLUMN-2 
     MOVE NAME-STO (N-COLUMN-1) TO DL-COLUMN-1 
     MOVE NAME-STO (N-COLUMN-2) TO DL-COLUMN-2 
     MOVE DETAIL-LINE TO NAMELIST-RECORD-OUT 
     WRITE NAMELIST-RECORD-OUT 
      AFTER ADVANCING 1 LINE 
     IF N-COLUMN-2 = 108 
      MOVE 0 TO NAME-COUNT 
      MOVE 0 TO N-COLUMN-1 
      MOVE 54 TO N-COLUMN-2 
     END-IF. 

这不是我所要做的,但直到我弄清楚我不能继续。

+0

[打印在两列]可能重复(http://stackoverflow.com/questions/14679229/printing-in-two-columns) – 2014-01-02 02:04:21

回答

3

我不熟悉的方言COBOL的,但我thnk问题是:

MOVE名称中的name-STORAGE

余吨应该是这样的: MOVE NAME-在名字STO的名称存储(名称计数)

我是对的,我错了,或者我只是在做梦?

+0

不错,这很好。从现在起我必须记住这一点。现在我可以继续完成这个。非常感谢。 – Kimmy1235 2011-01-27 15:50:23