fc2ブログ

(元)社内SEの徒然なる日記

COBOLでテキストデータ中のNULLを変換する方法

■ Nullの変換

COBOLでテキストデータを読んで、レイアウト変換してテキストデータに出力するプログラムがあるのですが、この時に、入力側のテキストデータの中にNullが含まれていたため、後続の処理で障害が発生してしまいました。

嫌らしいのが、ある項目の中の一部がNullっていうパターンだってことです。

実際には下図のような感じで、テキストエディタで見ると「社内 日記」って見えるのですが、この社内と日記の間が実はNullなのです。
COBOLでNULL - 1

方法は色々とあると思いますが、INSPECT文を使って半角スペースに変換することにしました。

こんな感じです。
INSPECT  WK-MSG  REPLACING  ALL X'00' BY X'20'.


WK-MSGは、Xタイプの項目で、問題の「社内 日記」が入っています。

INSPECT文は、項目中の値の出現回数のカウント、および置換を行うことが出来ます。ここでは、COBOL文法書でいう「書き方2」の、文字列の置き換えでの書き方です。

COBOLでNullをどう表現するか迷ったのですが、X と ' を使って16進文字定数で記述することにしました。INSPECT文で、この表記が通るか心配だったのですが、特に問題なく動いてくれました。

ちなみに、X'00' がNull、X'20' が半角スペースですので、Null値があったら、半角スペースに変換されることになります。

■ 後書き

問題のテキストファイルですが、とあるお客様から定期的に頂いているデータです。誰でも名前くらいは聞いたことがあるだろう大企業なのですが、まさかデータ中にNullを含めてくるとは思いませんでした。

この項目、そのままOracleのテーブルにINSERTされて、それを使って帳票を作成するって使い方だったのですが、帳票ソフトが項目中のNullに対応出来ずに帳票出力時に異常終了、ObjectBrowserでデータを見ると、Null以降の値が見えない(上記の例だと 社内 という値になっているように見える)し、散々でした。

っていうか、どうやって項目中にNullなんぞ突っ込んだんでしょうか。それ自体が結構難しい気がしますが・・・

それにしても、項目自体がNullだった場合の変換方法は珍しくありませんが、項目内の一部がNullというのは、意外と扱いに困ります。

今回も、INSPECT文で置換しようというのは直ぐに思いついたのですが、Null値の変換という点で少し悩むことになりました。

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する