Table 搜索 Cobol 问题
Table Search Cobol Issue
我的程序应该接受一个字符并将其与 table 进行比较,该 table 填充了字母表的大写和小写版本。然后它应该显示字母在字母表中的位置。 D = 4。我显然做错了什么,但我终究无法弄清楚是什么。
Table 定义如下。
01 WS-ALPHABET-TABLE-DATA.
05 FILLER PIC X(02) VALUE 'Aa'.
05 FILLER PIC X(02) VALUE 'Bb'.
05 FILLER PIC X(02) VALUE 'Cc'.
05 FILLER PIC X(02) VALUE 'Dd'.
05 FILLER PIC X(02) VALUE 'Ee'.
05 FILLER PIC X(02) VALUE 'Ff'.
05 FILLER PIC X(02) VALUE 'Gg'.
05 FILLER PIC X(02) VALUE 'Hh'.
05 FILLER PIC X(02) VALUE 'Ii'.
05 FILLER PIC X(02) VALUE 'Jj'.
05 FILLER PIC X(02) VALUE 'Kk'.
05 FILLER PIC X(02) VALUE 'Ll'.
05 FILLER PIC X(02) VALUE 'Mm'.
05 FILLER PIC X(02) VALUE 'Nn'.
05 FILLER PIC X(02) VALUE 'Oo'.
05 FILLER PIC X(02) VALUE 'Pp'.
05 FILLER PIC X(02) VALUE 'Qq'.
05 FILLER PIC X(02) VALUE 'Rr'.
05 FILLER PIC X(02) VALUE 'Ss'.
05 FILLER PIC X(02) VALUE 'Tt'.
05 FILLER PIC X(02) VALUE 'Uu'.
05 FILLER PIC X(02) VALUE 'Vv'.
05 FILLER PIC X(02) VALUE 'Ww'.
05 FILLER PIC X(02) VALUE 'Xx'.
05 FILLER PIC X(02) VALUE 'Yy'.
05 FILLER PIC X(02) VALUE 'Zz'.
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 26 TIMES
INDEXED BY C.
10 ALPHABET-CHAR PIC X(02).
01 ALPHABET-NUM PIC 99 VALUE ZEROS.
01 CHAR PIC X.
88 VALIDCHAR VALUE "A" THRU "Z", "a" THRU "z".
其余代码
0000-DRIVER.
PERFORM 0100-INITIALIZE.
PERFORM 1000-CHAR-TEST.
PERFORM 9000-CLOSE.
GOBACK.
0100-INITIALIZE.
ACCEPT CURRENT-DATE FROM DATE.
MOVE CURRENT-YEAR TO WS-FORMATTED-DATE-YY.
MOVE CURRENT-MONTH TO WS-FORMATTED-DATE-MM.
MOVE CURRENT-DAY TO WS-FORMATTED-DATE-DD.
DISPLAY 'HW15 RACHEL GRAHAM ' WS-FORMATTED-DATE.
PERFORM VARYING C FROM 1 BY 1
UNTIL C > 26
DISPLAY ALPHABET-CHAR(C)
END-PERFORM.
PERFORM 1500-ACCEPT.
1000-CHAR-TEST.
IF CHAR = ' ' THEN
PERFORM 1300-NO-CHAR
ELSE
IF VALIDCHAR
PERFORM 1200-VALID-CHAR
ELSE
PERFORM 1100-INVALID-CHAR
END-IF
END-IF.
1100-INVALID-CHAR.
DISPLAY 'CHARACTER IN: ' CHAR.
DISPLAY 'NOT A LETTER IN THE ALPHABET'.
1200-VALID-CHAR.
SET C TO 1.
SEARCH WS-ALPHABET-TABLE
WHEN ALPHABET-CHAR (C) = CHAR
SET ALPHABET-NUM TO C
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.
1300-NO-CHAR.
DISPLAY 'CHARACTER IN: " "' CHAR.
DISPLAY 'NO CHARACTER ENTERED'.
1500-ACCEPT.
ACCEPT CHAR.
9000-CLOSE.
GOBACK.
STOP RUN.
任何帮助将不胜感激。
什么是 CHAR ???如果是单个字符就说
03 CHAR pic X.
您正在比较 2 个字符的字段和 1 个字符的字段
尝试将 table 更改为
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 52 TIMES
INDEXED BY C.
10 ALPHABET-CHAR PIC X(01).
01 ALPHABET-NUM PIC 99 VALUE ZEROS.
并搜索到
SET C TO 1.
SEARCH WS-ALPHABET-TABLE
WHEN ALPHABET-CHAR (C) = CHAR
SET ALPHABET-NUM TO C
compute ALPHABET-NUM = (ALPHABET-NUM + 1) / 2
end-compute
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.
或者您可以将 table 更改为
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 26 TIMES
INDEXED BY C.
10 UPPER-CHAR PIC X(01).
10 LOWER-CHAR PIC X(01).
和搜索
SEARCH WS-ALPHABET-TABLE
WHEN UPPER-CHAR (C) = CHAR or LOWER-CHAR (c) = CHAR
SET ALPHABET-NUM TO C
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.
我的程序应该接受一个字符并将其与 table 进行比较,该 table 填充了字母表的大写和小写版本。然后它应该显示字母在字母表中的位置。 D = 4。我显然做错了什么,但我终究无法弄清楚是什么。
Table 定义如下。
01 WS-ALPHABET-TABLE-DATA.
05 FILLER PIC X(02) VALUE 'Aa'.
05 FILLER PIC X(02) VALUE 'Bb'.
05 FILLER PIC X(02) VALUE 'Cc'.
05 FILLER PIC X(02) VALUE 'Dd'.
05 FILLER PIC X(02) VALUE 'Ee'.
05 FILLER PIC X(02) VALUE 'Ff'.
05 FILLER PIC X(02) VALUE 'Gg'.
05 FILLER PIC X(02) VALUE 'Hh'.
05 FILLER PIC X(02) VALUE 'Ii'.
05 FILLER PIC X(02) VALUE 'Jj'.
05 FILLER PIC X(02) VALUE 'Kk'.
05 FILLER PIC X(02) VALUE 'Ll'.
05 FILLER PIC X(02) VALUE 'Mm'.
05 FILLER PIC X(02) VALUE 'Nn'.
05 FILLER PIC X(02) VALUE 'Oo'.
05 FILLER PIC X(02) VALUE 'Pp'.
05 FILLER PIC X(02) VALUE 'Qq'.
05 FILLER PIC X(02) VALUE 'Rr'.
05 FILLER PIC X(02) VALUE 'Ss'.
05 FILLER PIC X(02) VALUE 'Tt'.
05 FILLER PIC X(02) VALUE 'Uu'.
05 FILLER PIC X(02) VALUE 'Vv'.
05 FILLER PIC X(02) VALUE 'Ww'.
05 FILLER PIC X(02) VALUE 'Xx'.
05 FILLER PIC X(02) VALUE 'Yy'.
05 FILLER PIC X(02) VALUE 'Zz'.
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 26 TIMES
INDEXED BY C.
10 ALPHABET-CHAR PIC X(02).
01 ALPHABET-NUM PIC 99 VALUE ZEROS.
01 CHAR PIC X.
88 VALIDCHAR VALUE "A" THRU "Z", "a" THRU "z".
其余代码
0000-DRIVER.
PERFORM 0100-INITIALIZE.
PERFORM 1000-CHAR-TEST.
PERFORM 9000-CLOSE.
GOBACK.
0100-INITIALIZE.
ACCEPT CURRENT-DATE FROM DATE.
MOVE CURRENT-YEAR TO WS-FORMATTED-DATE-YY.
MOVE CURRENT-MONTH TO WS-FORMATTED-DATE-MM.
MOVE CURRENT-DAY TO WS-FORMATTED-DATE-DD.
DISPLAY 'HW15 RACHEL GRAHAM ' WS-FORMATTED-DATE.
PERFORM VARYING C FROM 1 BY 1
UNTIL C > 26
DISPLAY ALPHABET-CHAR(C)
END-PERFORM.
PERFORM 1500-ACCEPT.
1000-CHAR-TEST.
IF CHAR = ' ' THEN
PERFORM 1300-NO-CHAR
ELSE
IF VALIDCHAR
PERFORM 1200-VALID-CHAR
ELSE
PERFORM 1100-INVALID-CHAR
END-IF
END-IF.
1100-INVALID-CHAR.
DISPLAY 'CHARACTER IN: ' CHAR.
DISPLAY 'NOT A LETTER IN THE ALPHABET'.
1200-VALID-CHAR.
SET C TO 1.
SEARCH WS-ALPHABET-TABLE
WHEN ALPHABET-CHAR (C) = CHAR
SET ALPHABET-NUM TO C
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.
1300-NO-CHAR.
DISPLAY 'CHARACTER IN: " "' CHAR.
DISPLAY 'NO CHARACTER ENTERED'.
1500-ACCEPT.
ACCEPT CHAR.
9000-CLOSE.
GOBACK.
STOP RUN.
任何帮助将不胜感激。
什么是 CHAR ???如果是单个字符就说
03 CHAR pic X.
您正在比较 2 个字符的字段和 1 个字符的字段 尝试将 table 更改为
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 52 TIMES
INDEXED BY C.
10 ALPHABET-CHAR PIC X(01).
01 ALPHABET-NUM PIC 99 VALUE ZEROS.
并搜索到
SET C TO 1.
SEARCH WS-ALPHABET-TABLE
WHEN ALPHABET-CHAR (C) = CHAR
SET ALPHABET-NUM TO C
compute ALPHABET-NUM = (ALPHABET-NUM + 1) / 2
end-compute
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.
或者您可以将 table 更改为
01 FILLER REDEFINES WS-ALPHABET-TABLE-DATA.
05 WS-ALPHABET-TABLE OCCURS 26 TIMES
INDEXED BY C.
10 UPPER-CHAR PIC X(01).
10 LOWER-CHAR PIC X(01).
和搜索
SEARCH WS-ALPHABET-TABLE
WHEN UPPER-CHAR (C) = CHAR or LOWER-CHAR (c) = CHAR
SET ALPHABET-NUM TO C
DISPLAY CHAR 'IS NUMBER ' ALPHABET-NUM 'IN THE ALPHABET'
END-SEARCH.