2017-03-08 80 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

相關問題