メニューボタン
サポートチーム便り2013.01.16

不正なシフトインシフトアウトついて

現 象

ファイルのフィールド内にシフトインシフトアウトがペアになっていないデータが見つかりました。
QUERYで見ると正しく表示されなかったので、DSPFコマンドを使って確認してみると、0Eはありますが、0Fが見つかりません。どのような理由でこうなってしまったのか原因は解っておりませんが、まずは問題のあるレコードを洗い出し、修復して正常な状態に戻したいと考えています。
数レコードのファイルでしたら1件ずつ確認できますが、レコード件数が多くて困っています。
不正な文字が入っているレコードを探し出すために有効なコマンドはありませんでしょうか。

解決方法

IBMから提供されているコマンドではそのような機能は残念ながらございません。プログラムを作成し検索する必要があります。
DBCSの場合、両端を左端は0E(シフトアウト)、右端は0F(シフトイン)でくくる必要がありますが、どちらか片方だけない場合や、左端が0Fで右端が0E、両端が0Eあるいは0Fのみ等のように、順序がおかしくなっていると、不正なデータとみなされ、正しく表示・使用することができません。
どちらか片方だけ欠落している場合、SCAN命令を使用したプログラムで確認することができます。
しかし、0Eと0Fの順序が正しくないデータがあった場合にはSCANでは確認できません。このようなデータが混ざる場合は、RPGなどを使って、IF文で1カラムずつ16進数表示の内容を判定していくしかありません。まず先頭に0Eがあるか、あった場合は、次のカラムは0Fかどうか、0Fでなければ、さらに次のカラムが0Fかどうかを判定していきます。このロジックの場合、フィールドの長さに合わせて、IF文の数を調整する必要があります。

エラーメッセージについては、一つのエラーに、二つ以上のメッセージが存在する場合があります。画面下部に表示されているメッセージ一つだけでなく、そのさらに前にエラーの原因を明確に示したメッセージが記録されている場合等です。これを確認するためには、ジョブログを確認する必要があります。
ジョブログを確認するには、実行中のジョブの場合は、DSPJOBLOGコマンド(コマンド実行後、F10を打鍵、PgUpキーおよびPgDnキーでログの確認可能)、終了後のジョブの場合は、スプールファイルQEZJOBLOGにて確認ができます。
ジョブログにはエラーメッセージの他、CL等で何を実行したか、結果はどうだったか等の報告メッセージも記載されます。記載されるか否かは、実行ジョブのメッセージのロギングの設定値で決まります。設定値はHELPにて参照が可能です。

ジョブログが出力されていないような場合は、使用しているジョブのジョブ記述の設定値を確認してください。

あわせて読みたい記事

PAGE TOP