0

マップには、9(6)、9(3)、9(3)、9(3)の4つのフィールドがあります。私は次のような検証コードを書きました:

IF ROLLNUM IS NOT NUMERIC                          
MOVE DFHRED TO ROLLNUMC                         
MOVE 'INVALID DATA' TO RESMSGO                  
MOVE ROLLNUMI TO ROLLNUMO                       
PERFORM SEND-MAP THRU SEND-MAP-EXIT             
PERFORM KEY-VALIDATION THRU KEY-VALIDATION-EXIT.

しかし、A12AKのような値をcicsからデータベースに挿入している間、エラーは発生しません。Aを1に、Bを2に、というように置き換えています...なぜこれが起こっているのですか?そしてこれを回避する方法

4

3 に答える 3

6

Gilbertは、CICSマップの修正について適切なアドバイスを提供しています。取って!

「奇妙な」値を説明してみましょう...

文字(PIC X)がPIC 9データ項目に配置されると、文字値を表すバイトの上位4ビットが'F'xで上書きされます。下位4ビットはそのままです。

この時点で、EBCDIC文字チャートを確認すると便利な場合があります

'A'の16進表現は'C1'xであり、1は'F1'xであることに注意してください。'A'が PIC 9フィールドに移動されると、1になります(上位4ビットの'C'xは'F'xに置き換えられ、下位4ビットはそのままになります)。アルファベットのすべての文字に似たタイプのもの。'A'から'Z'までのEBCDIC文字シーケンスは連続していないことに注意してください(下位4ビットが'A'x-'F'x範囲にロールインするときにギャップがあります)。これが、文字を「X」タイプから「9」タイプのフィールドに移動するときに常に「有効な」数字を取得する理由です。

結果は、数字、文字、およびスペースのみが含まれる場合に、「X」タイプから「9」タイプのデータ項目に移動した後の有効な数値になります。その後、これはIF NUMERICテストに合格します。

PIC 9問題の根本は、CICSマップが、上記のように変換されるときに定義された作業用ストレージ項目にその値が転送されるときに、数値以外のデータ入力を許可することです。あなたが望むものではありません!Gilbertが指摘したように、CICSマップフィールドを「NUM」として定義すると、ユーザーが入力できる有効な文字は数字のみになり、問題が解決します。

最後に、「@」などの一部の非英字は、有効な数字にまとめられないことに注意してください。

于 2012-04-30T17:09:11.260 に答える
4

数値フィールドのBMSマップセットのDFHMDFフィールドにATTRB=(UNPROT、NUM、FSET、IC)を追加します。

JUSTIFY =(RIGHT、ZERO)も必要です。

于 2012-04-30T16:22:47.280 に答える
1

CICSは、BIFDEEDITオプションも提供します。

于 2012-05-01T01:57:22.837 に答える