Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Input 使用条件名称和集合读取输入文件并在COBOL中计数_Input_Conditional Statements_Variable Assignment_Cobol - Fatal编程技术网

Input 使用条件名称和集合读取输入文件并在COBOL中计数

Input 使用条件名称和集合读取输入文件并在COBOL中计数,input,conditional-statements,variable-assignment,cobol,Input,Conditional Statements,Variable Assignment,Cobol,|| 下面是我所拥有的。 我不知道它到底是在读文件还是不算文件。我把每一点都反复检查了一遍,结果什么也没发现。任何帮助都将不胜感激 *This program will take in a file containing the roster of a *children's band and will generate an output report of the *number of children playing an instrument from each categ

|| 下面是我所拥有的。 我不知道它到底是在读文件还是不算文件。我把每一点都反复检查了一遍,结果什么也没发现。任何帮助都将不胜感激

  *This program will take in a file containing the roster of a
  *children's band and will generate an output report of the 
  *number of children playing an instrument from each category.

   IDENTIFICATION DIVISION.
   PROGRAM-ID. LAB3A.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT BAND-FILE
           ASSIGN TO 'lab3-in.dat'
           ORGANIZATION IS SEQUENTIAL
           ACCESS IS SEQUENTIAL.

   DATA DIVISION.
   FILE SECTION.
   FD BAND-FILE.
   01 CHILD.
       05 NAME PIC X(12).
       05 GENDER PIC A.
       05 INST PIC X(15).

   WORKING-STORAGE SECTION.
   01 ENDOFFILEINDICATOR PIC X.
      88 EOF VALUE 'Y' WHEN SET TO FALSE IS 'N'.
   01 CAT PIC X(15).
   01 BRASSCOUNT PIC 999.
   01 PERCCOUNT PIC 999.
   01 STRINGCOUNT PIC 999.
   01 WOODCOUNT PIC 999.
   01 OTHERCOUNT PIC 999.
   01 INSTRUMENT PIC X(15).
       88 BRASS VALUE 'Bugle' 'Flugelhorn' 'Sousaphone'
               'Trombone' 'Trumpet' 'Tuba'.
       88 PERC VALUE 'Bass Drum' 'Bells' 'Bongos' 'Castanets'
               'Chimes' 'Cymbals' 'Snare Drum' 'Xylophone'.
       88 STRINGS VALUE 'Banjo' 'Bass' 'Cello' 'Guitar' 'Harp'
               'Lyre' 'Mandolin' 'Violin'.
       88 WOOD VALUE 'Bagpipes' 'Bassoon' 'Clarinet' 'Flute'
               'Oboe' 'Piccolo' 'Saxophone'.

   PROCEDURE DIVISION.
   000-MAIN.

       OPEN INPUT BAND-FILE
       PERFORM READ-BAND UNTIL NOT EOF
       PERFORM USEROUT
       CLOSE BAND-FILE
       STOP RUN.

   READ-BAND.
       READ BAND-FILE
          AT END
             SET EOF TO FALSE
          NOT AT END
             MOVE INST TO INSTRUMENT
             PERFORM CHECK-INST
       END-READ.

   CHECK-INST.
       IF BRASS
           ADD 1 TO BRASSCOUNT
           END-ADD
       END-IF
       IF PERC
           ADD 1 TO PERCCOUNT
           END-ADD
       END-IF 
       IF STRINGS
           ADD 1 TO STRINGCOUNT
           END-ADD
       END-IF
       IF WOOD
           ADD 1 TO WOODCOUNT
           END-ADD
       ELSE
           ADD 1 TO OTHERCOUNT
           END-ADD
       END-IF.

   USEROUT.
       DISPLAY ' '
       MOVE 'Brass:' TO CAT
       DISPLAY CAT BRASSCOUNT
       MOVE 'Percussion:' TO CAT
       DISPLAY CAT PERCCOUNT
       MOVE 'String:' TO CAT
       DISPLAY CAT STRINGCOUNT
       MOVE 'Woodwind:' TO CAT
       DISPLAY CAT WOODCOUNT
       MOVE 'Other:' TO CAT
       DISPLAY CAT OTHERCOUNT
       DISPLAY ' '.
试着改变

 PERFORM READ-BAND UNTIL NOT EOF

试着改变

 PERFORM READ-BAND UNTIL NOT EOF


我建议您对代码进行以下更改

请注意,以**分隔的语句表示我已更改了您的代码

在“工作存储”部分

  WORKING-STORAGE SECTION.
  01 ENDOFFILEINDICATOR PIC X.
     **88 EOF VALUE 'Y'.**
在程序司

PROCEDURE DIVISION.
000-MAIN.

   OPEN INPUT BAND-FILE
   PERFORM READ-BAND **UNTIL EOF**
   PERFORM USEROUT
   CLOSE BAND-FILE
   STOP RUN.
在读带段落中

READ-BAND.
   READ BAND-FILE
      AT END
         **SET EOF TO TRUE**
      NOT AT END
         MOVE INST TO INSTRUMENT
         PERFORM CHECK-INST
   END-READ.
通过代码中的这些更改&通过使用以下输入记录

Abby        FClarinet  
Amber       FFlute     
Amy         FBells     
Amy Farrah  FHarp      
Andrew      MSaxophone 
Arielle     MCastanets 
Brooke      MClarinet  
Colleen     FFlute     
Dana        FClarinet  
我能够得到以下结果

Brass:            
Percussion:    002
String:        001
Woodwind:      006
Other:         003

我建议您对代码进行以下更改

请注意,以**分隔的语句表示我已更改了您的代码

在“工作存储”部分

  WORKING-STORAGE SECTION.
  01 ENDOFFILEINDICATOR PIC X.
     **88 EOF VALUE 'Y'.**
在程序司

PROCEDURE DIVISION.
000-MAIN.

   OPEN INPUT BAND-FILE
   PERFORM READ-BAND **UNTIL EOF**
   PERFORM USEROUT
   CLOSE BAND-FILE
   STOP RUN.
在读带段落中

READ-BAND.
   READ BAND-FILE
      AT END
         **SET EOF TO TRUE**
      NOT AT END
         MOVE INST TO INSTRUMENT
         PERFORM CHECK-INST
   END-READ.
通过代码中的这些更改&通过使用以下输入记录

Abby        FClarinet  
Amber       FFlute     
Amy         FBells     
Amy Farrah  FHarp      
Andrew      MSaxophone 
Arielle     MCastanets 
Brooke      MClarinet  
Colleen     FFlute     
Dana        FClarinet  
我能够得到以下结果

Brass:            
Percussion:    002
String:        001
Woodwind:      006
Other:         003

将一些
显示
语句放在程序的各个点上。这应该会告诉您发生了什么。您可以尝试初始化EOF变量,并将
更改为非EOF
直到
直到EOF
我感谢您的帮助和评论。我将显示放在非结尾缩进中,没有得到任何输出,因此它甚至没有进入那种情况,这将我的问题缩小到文件的读取。您的输入文件看起来不是按顺序的,而是按顺序的。如果您不确定程序是如何工作的,可以使用编译器特定的帮助:使用
cobc-x-ftrace all lab3.cob
编译,并使用
cob\u SET\u TRACE=Y cob\u TRACE\u FILE=TRACE.log./lab3
运行,然后检查程序流。而且。。。我建议至少切换到GnuCOBOL 2.2…在程序的各个点上放置一些
显示
语句。这应该会告诉您发生了什么。您可以尝试初始化EOF变量,并将
更改为非EOF
直到
直到EOF
我感谢您的帮助和评论。我将显示放在非结尾缩进中,没有得到任何输出,因此它甚至没有进入那种情况,这将我的问题缩小到文件的读取。您的输入文件看起来不是按顺序的,而是按顺序的。如果您不确定程序是如何工作的,可以使用编译器特定的帮助:使用
cobc-x-ftrace all lab3.cob
编译,并使用
cob\u SET\u TRACE=Y cob\u TRACE\u FILE=TRACE.log./lab3
运行,然后检查程序流。而且。。。我建议至少切换到GnuCOBOL 2.2。。。