2017-03-08 75 views
0

我正在使用RedHat6并使用COBOL。我想检查变量的每个数字,如果它是半宽度 - > CONTINUE,Else - > DISPLAY ERROR。基本上,我在WHAL子句的EVALUATE语句中列出了所有半角字符。像这样:检查COBOL中半角片假名字符

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. 

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

ツテトナニネネハハヒフヘホマミモヤヤラリルレロワン

虽然我确定没有任何代码行遗漏了结尾的引号。就像这样:

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

但这些字符是OK,我不知道为什么:

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

谁都可以帮我?请! 对不起,我的英语不好!

+1

这些字符可能是“多字节”。你看过你的文档吗?你正在检查的领域的定义是什么? –

+0

我检查的字段有X型,而在我的文档中却说X:半角英数文字“。我不懂日语,所以我用谷歌翻译它,意思是:半角英数字符。如果我检查字符是半角,我需要检查alphabeta,numeric和hiragana,片假名(日语的字母表) – tieuquynd

+1

你没有说过你使用哪个编译器。你有同事吗?他们说什么? “不工作”列表看起来像你的“作品”列表上一样。Typo? –

回答

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会告诉程序,这是一个民族性格,因此是多字节。

您对evaluate语句的输入也需要定义为PIC N而不是PIC X。 A PIC X字段不会识别双字节字符。

+0

单字节字符为1字节,多买字符为2字节,对吗?因为有两种方法可以输入日文字符(半角和全角)。我检查的字符是1个字节的字符。 1字节:アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワ.....ン......... 2字节:アイウエカキクコサシスセスタッチチタットナニネネハヒフヘマムマモヤ〇〇〇〇〇〇〇〇〇〇〇〇〇〇 multiン – tieuquynd

+0

多字节只是意味着不止一个。根据我的经验,它们通常是双字节,但没有任何东西阻止它们超过2个字节。由于这些字符不在EBCDIC代码表中,所以我相信你仍然需要使用国家字符。你怎么知道这些是单字节字符?在UTF-16中,例如,é字符是双字节。给PIC N一个尝试我很确定它会起作用 – SaggingRufus

相关问题