2010-12-03 86 views
2

我遇到了一个我无法解决的问题。我的输出显示错误。比如我有一个猜想出现这样一行:在我的COBOL中遇到麻烦

123-45-6789 JS Doe的第二年编程88 266 3.02

,而是被显示出来是这样的:

123- 45-6789 JS Doe第二年编程88 266
3.02

任何人都知道如何解决这个问题。我以前从未遇到过这个问题。

下面是对于线

01 DETAIL-LINE. 
     05 DL-FIRST-NUM   PIC X(3). 
     05 DL-DASH-1    PIC X  VALUE '-'. 
     05 DL-SECOND-NUM   PIC XX. 
     05 DL-DASH-2    PIC X  VALUE '-'. 
     05 DL-THIRD-NUM   PIC X(4). 
     05 BLANK-A-OUT    PIC X(3) VALUE SPACES. 
     05 DL-FIRST-LETTER   PIC X. 
     05 BLANK-B-OUT    PIC X  VALUE SPACES. 
     05 DL-SECOND-LETTER  PIC X. 
     05 BLANK-C-OUT    PIC X  VALUE SPACES. 
     05 DL-LAST-NAME   PIC X(9). 
     05 BLANK-D-OUT    PIC X(2) VALUE SPACES. 
     05 DL-CLASS-STANDING  PIC X(9). 
     05 BLANK-E-OUT    PIC X(3) VALUE SPACES. 
     05 DL-MAJOR    PIC X(13). 
     05 BLANK-F-OUT    PIC X(3) VALUE SPACES. 
     05 DL-HOURS    PIC ZZ9. 
     05 BLANK-G-OUT    PIC X(5) VALUE SPACES. 
     05 DL-POINTS    PIC ZZ9. 
     05 BLANK-H-OUT    PIC X(4) VALUE SPACES. 
     05 DL-GPA     PIC 9.99. 

这里的存储区域代码写出来

400-PROCESS-ONE-RECORD. 
     IF LINE-COUNT >= 52 
      PERFORM 600-NEXT-PAGE 
     END-IF 
     ADD 2 TO LINE-COUNT 
     MOVE SSN-IN TO SSN-BREAK 
     MOVE FIRST-NUM TO DL-FIRST-NUM 
     MOVE SECOND-NUM TO DL-SECOND-NUM 
     MOVE THIRD-NUM TO DL-THIRD-NUM 
     MOVE STUDENT-NAME-IN TO NAME-BREAK 
     MOVE FIRST-LETTER TO DL-FIRST-LETTER 
     MOVE SECOND-LETTER TO DL-SECOND-LETTER 
     MOVE LAST-NAME TO DL-LAST-NAME 
     IF CLASS-STANDING-IN = 0 
      MOVE 'HIGH SCHOOL' TO DL-CLASS-STANDING 
     END-IF 
     IF CLASS-STANDING-IN = 1 
      MOVE 'First Yr' TO DL-CLASS-STANDING 
     END-IF 
     IF CLASS-STANDING-IN = 2 
      MOVE 'Second Yr' TO DL-CLASS-STANDING 
     END-IF 
     IF CLASS-STANDING-IN = 3 
      MOVE 'PROGRAM 60' TO DL-CLASS-STANDING 
     END-IF 
     IF CLASS-STANDING-IN = ' ' OR 4 
      MOVE ' ' TO DL-CLASS-STANDING 
     END-IF 
     IF MAJOR-IN = 'NES' 
      MOVE 'Net Security' TO DL-MAJOR 
     END-IF 
     IF MAJOR-IN = 'NET' 
      MOVE 'Networking' TO DL-MAJOR 
     END-IF 
     IF MAJOR-IN = 'PGM' 
      MOVE 'Programming' TO DL-MAJOR 
     END-IF 
     IF MAJOR-IN = 'DIG' 
      MOVE 'Digital Media' TO DL-MAJOR 
     END-IF 
     IF MAJOR-IN = 'COR' 
      MOVE ' ' TO DL-MAJOR 
     END-IF 
     MOVE CREDIT-HOURS-IN TO DL-HOURS 
     IF MAJOR-IN = 'NES' 
      ADD 1 TO NES-TOTAL 
     END-IF 
     IF MAJOR-IN = 'NET' 
      ADD 1 TO NET-TOTAL 
     END-IF 
     IF MAJOR-IN = 'PGM' 
      ADD 1 TO PGM-TOTAL 
     END-IF 
     IF MAJOR-IN = 'DIG' 
      ADD 1 TO DIG-TOTAL 
     END-IF 
     MOVE CREDIT-POINTS-IN TO DL-POINTS 
     COMPUTE TOTAL-GPA ROUNDED 
      = CREDIT-POINTS-IN/CREDIT-HOURS-IN 
     IF MAJOR-IN = 'NES' AND TOTAL-GPA > '3.O' 
      ADD 1 TO NES-GPA 
     END-IF 
     IF MAJOR-IN = 'NET' AND TOTAL-GPA > '3.O' 
      ADD 1 TO NET-GPA 
     END-IF 
     IF MAJOR-IN = 'PGM' AND TOTAL-GPA > '3.O' 
      ADD 1 TO PGM-GPA 
     END-IF 
     IF MAJOR-IN = 'DIG' AND TOTAL-GPA > '3.O' 
      ADD 1 TO DIG-GPA 
     END-IF 
     MOVE TOTAL-GPA TO DL-GPA 
     MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT 
     IF DL-CLASS-STANDING = 'First Yr' OR 'Second Yr' AND 
      GRAD-STAT-IN = ' ' OR 'X' 
     ADD CREDIT-POINTS-IN TO TOTAL-POINTS 
     ADD CREDIT-HOURS-IN TO TOTAL-HOURS 
     WRITE STUDENTS-RECORD-OUT 
      AFTER ADVANCING 1 LINES 
     END-IF. 
+1

这将有助于列出创建该输出的行 – 2010-12-03 02:33:49

回答

1

对换行符有几种可能的解释。

要消除的第一个解释是由任何要显示输出的设备引起的换行 。根据您提供的DETAIL-LINE记录 布局,换行发生在第72列。可疑。您的输出设备(例如屏幕或文件)是否在第72列缠绕线?012下一个可能的解释涉及一些非空格字符,如换行 存储在BLANK-H-OUT中。这可能是由程序中其他地方的任何编程漏洞 发生的。未经检查的界限数组/表引用通常是这类事情的来源。解决这个问题需要一些真正的调试。

0

你写一个72字符宽文件?我的直觉是你的记录是3个字符太短。

你能发布你的文件部分吗?