首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用if语句跳过COBOL中的记录

如何使用if语句跳过COBOL中的记录
EN

Stack Overflow用户
提问于 2013-10-30 07:19:43
回答 1查看 4.7K关注 0票数 0
代码语言:javascript
复制
              FD  STUDENTS-FILE-IN.
   01  STUDENTS-RECORD-IN.
       05  SSN-IN                  PIC X(9).
       05  STUDENT-NAME-IN         PIC X(11).
       05                          PIC X(5).
       05  GRAD-STATUS-IN          PIC X.
       05  CLASS-STANDING-IN       PIC X.
       05  MAJOR-IN                PIC X(3).
       05  CREDIT-HOURS-IN         PIC 9(3).
       05  CREDIT-POINTS-IN        PIC 9(3).

   FD  STUDENTS-FILE-OUT.
   01  STUDENTS-RECORD-OUT         PIC X(80).

   WORKING-STORAGE SECTION.
   01  ARE-THERE-MORE-RECORDS      PIC X(3)  VALUE 'YES'.
   01  PAGE-NUMBER                 PIC 99    VALUE ZERO.
   01  LINE-COUNT                  PIC 99    VALUE ZERO.
   01  SSID-BREAK.
       03 FIRST-PART               PIC X(3).
       03 SECOND-PART              PIC X(2).
       03 THIRD-PART               PIC X(4).
   01  NAME-BREAK.
       03 FIRST-LETTER             PIC X(1).
       03 MIDDLE-LETTER            PIC X(1).
       03 LAST-LETTER              PIC X(10).
   01  GRAD-CHECK                  PIC X.
   01  WS-DATE.
       05 RUN-YEAR                 PIC XX.
       05 RUN-MONTH                PIC XX.
       05 RUN-DAY                  PIC XX.

   01  HEADING-LINE-ONE.
       05                          PIC X(21) VALUE SPACES.
       05                          PIC X(33)
               VALUE 'RHODES STATE COLLEGE GRADE REPORT'.
       05                          PIC X(6) VALUE SPACES.
       05      HEADING-LINE-DATE.
               10  MONTH-NOW       PIC XX.
               10                  PIC X     VALUE '/'.
               10  DAY-NOW         PIC XX.
               10                  PIC X     VALUE '/'.
               10  YEAR-NOW        PIC XX.

       05                          PIC X(3)  VALUE SPACES.
       05                          PIC X(4)  VALUE 'PAGE'.
       05  HL-1-PAGE-NUMBER        PIC Z9    VALUE ZEROS.

   01  HEADING-LINE-TWO.
       05                          PIC X(10) VALUE 'SOC SEC NO'.
       05                          PIC X(4)  VALUE SPACES.
       05                          PIC X(12) VALUE 'STUDENT NAME'.
       05                          PIC X(3)  VALUE SPACES.
       05                          PIC X(8)  VALUE 'STANDING'.
       05                          PIC X(4)  VALUE SPACES.
       05                          PIC X(5)  VALUE 'MAJOR'.
       05                          PIC X(10) VALUE SPACES.
       05                          PIC X(5)  VALUE 'HOURS'.
       05                          PIC X(2)  VALUE SPACES.
       05                          PIC X(6)  VALUE 'POINTS'.
       05                          PIC X(5)  VALUE SPACES.
       05                          PIC X(3)  VALUE 'GPA'.

   01  DETAIL-LINE.

       05  DL-SSID.
           10 SSID-1               PIC X(3).
           10                      PIC X     VALUE "-".
           10 SSID-2               PIC X(2).
           10                      PIC X     VALUE "-".
           10 SSID-3               PIC X(4).
       05  BLANK-B                 PIC X(3)  VALUE SPACES.
       05  DL-NAME .
           10 FIRST-INI            PIC X.
           10                      PIC X     VALUE SPACES.
           10 MID-INI              PIC X.
           10                      PIC X     VALUE SPACES.
           10 LAST-NAME            PIC X(10).

       05  BLANK-C                 PIC X(3)  VALUE SPACES.
       05  YEAR-STATUS             PIC X(9).
       05  BLANK-D                 PIC X(3)  VALUE SPACES.
       05  STUDENT-MAJOR           PIC X(13).
       05  BLANK-E                 PIC X(5)  VALUE SPACES.
       05  STUDNET-HOURS           PIC ZZ9.
       05  BLANK-F                 PIC X(5)  VALUE SPACES.
       05  STUDENT-POINTS          PIC ZZ9.
       05  BLANK-G                 PIC X(4)  VALUE SPACES.
       05  STUDENT-GPA             PIC 9V99.

   01  TOTALS-LINE.

       05 TOTALS                   PIC X(6)  VALUE 'TOTALS'.
       05                          PIC X(34) VALUE  SPACES.
       05 HITS-TOTAL               PIC ZZZ,ZZZ.
       05                          PIC X(9) VALUE SPACES.
       05 BATS-TOTAL               PIC ZZZ,ZZZ.
       05                          PIC X(10) VALUE  SPACES.
       05 AVG-TOTAL                PIC .999.

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

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

       PERFORM 300-WRITE-HEADINGS

       PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
           READ STUDENTS-FILE-IN
               AT END
                    MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
                NOT AT END
                    PERFORM 200-PROCESS-ONE-RECORD
            END-READ
        END-PERFORM

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

   200-PROCESS-ONE-RECORD.

       IF  LINE-COUNT >= 53
          PERFORM 300-WRITE-HEADINGS
       END-IF


  *    IF  GRAD-STATUS-IN NOT = '1' AND NOT = '2'
  *        PERFORM 400-WRITE-TOTALS.
  *    END-IF

       MOVE SSN-IN TO SSID-BREAK
       MOVE FIRST-PART TO SSID-1
       MOVE SECOND-PART TO SSID-2
       MOVE THIRD-PART TO SSID-3
       MOVE STUDENT-NAME-IN TO NAME-BREAK
       MOVE FIRST-LETTER TO FIRST-INI
       MOVE MIDDLE-LETTER TO MID-INI
       MOVE LAST-LETTER TO LAST-NAME
       MOVE GRAD-STATUS-IN TO GRAD-CHECK
       IF  GRAD-CHECK = 'Y'

       END-IF



       MOVE DETAIL-LINE TO STUDENTS-RECORD-OUT

       WRITE STUDENTS-RECORD-OUT
           AFTER ADVANCING 1 LINES
       ADD 1 TO LINE-COUNT.

输入文件如下所示

代码语言:javascript
复制
307662099KRAlexander     Y2NES005017    

基本上,某些文件不能满足要求,我们只是想跳过它们。这是一个我们不想写入输出文件并跳过的文件的示例。如果我解释得不好,我很抱歉,但我真的很纠结于COBOL。

EN

回答 1

Stack Overflow用户

发布于 2013-10-30 07:53:43

你的200段需要这样做:

代码语言:javascript
复制
IF NOT ( <condition-for-skipping )
    PERFORM PROCESS-THIS-RECORD
ELSE 
    PERFORM IGNORE-THIS-RECORD
END-IF

您可以轻松地交换条件。

代码语言:javascript
复制
IF ( <condition-for-skipping )
    PERFORM IGNORE-THIS-RECORD
ELSE 
    PERFORM PROCESS-THIS-RECORD
END-IF

你目前拥有的200段中的所有东西,你把它放到一个新的副刊过程中-这个-记录。你应该有一个新的段落忽略这个记录。如果没有其他情况,它可以计算被忽略的记录。然后,如果您对已处理的记录进行计数,并对输入记录进行计数,最后您可以检查所有内容要么已处理,要么被忽略。

您应该检查文件状态。最好使用作用域分隔符(如END-IF),并将句号/句点保持在最小。

88对于条件是很好使用的。节省了大量挂起的文字,使维护更加复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19670960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档