0

我正在研究 RedHat6 并使用 COBOL。我想检查变量的每一个数字,如果它是半角-> 继续,否则--> 显示错误。基本上,我在 EVALUATE 语句的 WHEN 子句中列出了所有半角字符。像这样:

PERFORM VARYING WK-IX FROM 1 BY 1 UNTIL WK-IX > WK-LENGTH
    EVALUATE WK-FORMAT-CHK-VALUE(WK-IX:1)
        WHEN 'A'
        WHEN 'B'
        WHEN 'C'
            CONTINUE
        WHEN OTHER
            DISPLAY 'ERROR'
    END-EVALUATE
END-PERFORM.

一切都很好,但是在编译时我遇到了半角片假名字符的问题。它说:“缺少文字的结束引号。区域 B 末尾的字符被假定为文字”,所有行都检查这些字符:

ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン</p>

虽然我确定没有任何代码行错过了结束引号。像这样:

WHEN 'ツ'
WHEN 'テ'
WHEN 'ト'

但是这些字符还可以,我不知道为什么:

ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ</p>

任何人都可以帮助我吗?请!对不起,我的英语不好!

4

1 回答 1

1

因为片假名字符集被认为是多字节字符集(如 Bill Woodger 所述),您需要确保启用 NSYMBOL 和 DBCS 编译选项。之后,您应该能够像这样定义文字:

EVALUATE WK-FORMAT-CHK-VALUE(WK-IX:1)    
   WHEN N'ツ'
   WHEN N'テ'
   WHEN N'ト'
      do something
   WHEN OTHER
      do something else
END-EVALUATE

N告诉程序这是一个国家字符,因此是多字节的。

您对评估子句的输入也需要定义为 aPIC N而不是 a PIC X。字段将PIC X无法识别双字节字符。

于 2017-03-08T11:32:50.010 回答