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。。。