首页 > 解决方案 > 如何搜索一个简单的表?

问题描述

我正在尝试理解 SEARCH 动词...

下面我将文件中的顺序记录读入 TABLE,然后尝试搜索它。但是它仅在 AIR-ID 为 01 或 02,而不是 03 时匹配。

我一定错过了一些基本的东西,并且一直试图通过各种例子来查看没有运气。

   IDENTIFICATION DIVISION.
   PROGRAM-ID. Search.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   
   SELECT AIRLINES ASSIGN TO "AIRLINES.DAT"
   ORGANIZATION IS LINE SEQUENTIAL.
   
   DATA DIVISION.
   FILE SECTION.
   
   FD AIRLINES.
   01  AIRLINE-RECORDS.
       05  AIRLINE-ID      PIC 99.
       05  AIRLINE-NAME    PIC X(15).

   
   WORKING-STORAGE SECTION.
       
   01  WS-AIRLINES.
       05  WS-ENTRIES OCCURS 4 TIMES INDEXED BY X1.
           10  WS-AIRLINE-ID      PIC 99.
           10  WS-AIRLINE-NAME    PIC X(15).
   
   01  AIR-ID    PIC 99  VALUE 04.
   01  EOF-SWITCH  PIC X   VALUE "N".
   
   PROCEDURE DIVISION.
   
   000-INITIALIZE.
       
   OPEN INPUT AIRLINES
   
   PERFORM 100-READ-FILE
   PERFORM 200-SEARCH-FILE
   .
       
   100-READ-FILE.
       READ AIRLINES INTO WS-AIRLINES
   .
       
   200-SEARCH-FILE.
       SET X1 TO 1.
           SEARCH WS-ENTRIES
               AT END 
                   DISPLAY "NOT FOUND"
               WHEN AIR-ID = WS-AIRLINE-ID (X1)
                   DISPLAY WS-AIRLINE-NAME (X1)
                   DISPLAY X1
           END-SEARCH
       .

航空公司.DAT

01airline01      
02airline02      
03airline03      
04airline04      

标签: cobolgnucobol

解决方案


由于缺乏答案,这是我能想到的最好的:

   IDENTIFICATION DIVISION.
   PROGRAM-ID. Search.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   
   SELECT AIRLINES ASSIGN TO AIRLINES.DAT
   ORGANIZATION IS LINE SEQUENTIAL.
   
   DATA DIVISION.
   FILE SECTION.
   
   FD AIRLINES.
   01  AIRLINE-RECORDS.
       05  AIRLINE-ID      PIC 99.
       05  AIRLINE-NAME    PIC X(15).

   
   WORKING-STORAGE SECTION.
       
   01  WS-AIRLINES.
       05  WS-ENTRIES OCCURS 4 TIMES INDEXED BY X1.
           10  WS-AIRLINE-ID      PIC 99.
           10  WS-AIRLINE-NAME    PIC X(15).
   
   01  AIR-ID    PIC 99  VALUE 02.
   01  EOF-SWITCH  PIC X   VALUE "N".
   
   PROCEDURE DIVISION.
   
   000-INITIALIZE.
       
   OPEN INPUT AIRLINES
   
   PERFORM 100-READ-FILE
   PERFORM 200-SEARCH-FILE
   
   STOP RUN
   .
       
   100-READ-FILE.
       SET X1 TO 1
       PERFORM VARYING X1 FROM 1 BY 1 UNTIL EOF-SWITCH = "Y"
           READ AIRLINES 
               AT END 
                   MOVE "Y" TO EOF-SWITCH
               NOT AT END
                   MOVE AIRLINE-ID TO WS-AIRLINE-ID (X1)
                   MOVE AIRLINE-NAME TO WS-AIRLINE-NAME (X1)
                   DISPLAY AIRLINE-ID "-" AIRLINE-NAME
                 
       .
       
   200-SEARCH-FILE.
       
       SET X1 TO 1.
           SEARCH WS-ENTRIES
               AT END 
                   DISPLAY "NOT FOUND"
               WHEN WS-AIRLINE-ID (X1) = AIR-ID
                   DISPLAY WS-AIRLINE-NAME (X1)
                   DISPLAY X1
           END-SEARCH
       .

推荐阅读