2012-04-30 11 views
0

私は9(6)、9(3)、9(3)、9(3)の4つのフィールドをマップに持っています。私はこのような検証コードを書いた:数字フィールドはcicsマップの文字を受け取ります

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. 

をしかし、CICSからデータベースにA12AKのような値を挿入しながら、私はエラーのいずれかの種類を取得しておりません。 Aを1、Bを2などに置き換えています。 これはどうしてですか?これを回避する方法

+0

数値フィールドのBMSマップセットのDFHMDFフィールドにATTRB =(UNPROT、NUM)を指定していますか? –

+0

@Gilber Le Blanc No.私はこのようにしました:ATTRB =(UNPROT、FSET、IC)、PICIN = '9(6)'、LENGTH = 6 – Pramod

+0

NUMを追加して問題が解決するかどうか確認してください。 –

答えて

4

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

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

5

ギルバート氏は、CICSマップの修正に関するアドバイスを提供しています。それを取る!

文字(PIC X)はPIC 9データ項目に置かれたとき

文字の値を表すバイトの 上位4ビットは 'でoverwittenされている...私は「奇妙な」値を説明してみましょうF'x。 の下位4ビットはそのままの状態です。

この時点では、「A」の16進表現がF1'x「C1'xと1がある」であることをEBCDIC character chart

通知をご覧に便利かもしれません。 PIC 9フィールドに 'A'を移動すると、1になります(上位4ビットの 'C'xは' F'x、下位4ビットはそのままの状態になります)。 アルファベットのすべての文字に似たタイプのものです。 'A'から 'Z'までのEBCDIC文字シーケンスは連続していないことに注意してください( の下位4ビットが 'A'x - ' F'xの範囲にくるときに隙間があります)。これは、文字を 'X'タイプから '9'タイプフィールドに移動するときに常に有効な数字を取得する理由です。

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

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

最後に、 '@'などの一部のアルファベット以外の文字は、有効な数字にコサージされないことに注意してください。

0

CICSには、BIF DEEDITオプションもあります。

関連する問題