RPG

239. もう一度サブ・ファイル (4)

次に SFLCLR( Subfile Clear ) と SFLINZ( Subffile Initialize ) について
これも体感してみよう。

まず SFLCLR とは文字通りサブ・ファイルをクリヤーする機能であって
サブ・ファイルの中身を消去して空にする機能である。
次はサブ・ファイル・クリヤー( SFLCLR ) の機能を体験できるようにしてある。
画面表示下部の SFLCLR ボタンを押すと、一瞬にしてサブ・ファイルの
データが消去される空になる。
これが SFLCLR の機能である。

商品コード 商品名 単価 品種コード 品種名
0001 NV-BS30S 目次ビデオ 165,000 0002 ビデオデッキ
0002 NV-BS50S ビデオ画王 200,000 0002 ビデオデッキ
0003 NV-CF1 Cカセット編集ビデオ 58,000 0002 ビデオデッキ
0004 NV-CF2 商品AAA 168,000- 0003 コンポ
0005 NV-CF81 更新テスト 48,000 0005 ヘッドホン
0006 NV-CF9 漢字テスト 19,000 0002 ビデオデッキ
0007 NV-F850 音声録画ビデオ 140,000 0002 ビデオデッキ
0008 NV-HK1 歌えるビデオ 90,000 0002 ビデオデッキ
0009 NV-H1T-S みんなのビデオ 69,800 0002 ビデオデッキ
0010 NV-SX10 ビデオ画王 115,000 0002 ビデオデッキ
0011 NV-W1 世界放送方式ビデオ 350,000 0002 ビデオデッキ
0012 RX-DT75 CDラジオカセット 53,800 0003 コンポ
0013 SC-CH150 超ミニ・コンポ 70,000 0003 コンポ
 (サブ・ファイルのクリヤー)

SFLCLR についてはご存じかもしれないが、次は SFLINZ の機能である。
SFLINZ ( Subfile Initialize ) 、つまりサブ・ファイル初期化という機能は
サブ・ファイル一杯にブランク・レコードを埋め込む機能である。
SFLCLR はレコードを消去していたのに対して SFLINZ はブランク・レコードを
目いっぱいに埋める機能のことである。

次の画面は SFLINZ の機能を示している。
この状態はサブ・ファイル・レコードが全くまだ無い状態であり、
それに対して SFLINZ ボタンを押すと一瞬のうちにサブ・ファイルはブランク・レコードで
一杯に満たされる。

商品コード 商品名 単価 品種コード 品種名
 (サブ・ファイルの初期化)

参考までにサブ・ファイルにレコードがある場合に SFLCLR と SFLINZ を
行ったときの違いを下記で体験することができる。
操作の順序として

  1. SFLCLR ボタンを押して結果を確認する
  2. RESET ボタンを押して元通りにする。
  3. SFLINZ ボタンを押して結果を確認する。
商品コード 商品名 単価 品種コード 品種名
0001 NV-BS30S 目次ビデオ 165,000 0002 ビデオデッキ
0002 NV-BS50S ビデオ画王 200,000 0002 ビデオデッキ
0003 NV-CF1 Cカセット編集ビデオ 58,000 0002 ビデオデッキ
0004 NV-CF2 商品AAA 168,000- 0003 コンポ
0005 NV-CF81 更新テスト 48,000 0005 ヘッドホン
0006 NV-CF9 漢字テスト 19,000 0002 ビデオデッキ
0007 NV-F850 音声録画ビデオ 140,000 0002 ビデオデッキ
0008 NV-HK1 歌えるビデオ 90,000 0002 ビデオデッキ
0009 NV-H1T-S みんなのビデオ 69,800 0002 ビデオデッキ
0010 NV-SX10 ビデオ画王 115,000 0002 ビデオデッキ
0011 NV-W1 世界放送方式ビデオ 350,000 0002 ビデオデッキ
0012 RX-DT75 CDラジオカセット 53,800 0003 コンポ
0013 SC-CH150 超ミニ・コンポ 70,000 0003 コンポ

SFLCLRSFLINZ の機能の違いがわかったところでサブ・ファイルにレコードを
出力して表示できるようにするには

SFLCLR で SFL を
空にしておく
WRITE命令で
SFLレコードを
追加する
EXFMT などで
画面を表示する

とするのが正しいサブ・ファイルの使い方であろう。
( ただし上記で SFLCLR は必ずしも必要ない )

ところが多くの誤った使い方として、

SFLINZ で SFL を
ブランクレコード
で埋める
UPDATE命令で
SFLレコードを
更新する
EXFMT などで
画面を表示する

という使用方法がある。
なぜこのような難しい持って回ったような使い方をするのだろうか ?

SFLINZSFLSIZ の分だけすべてブランク・レコードで埋めてしまうと

  • 全体の活動中の真のSFLレコードの件数が把握できない。
  • 更新用に SFLレコードを調べるときに、すべてのSFLレコードを読まなければならない。
  • さらにブランクかどうかをいちいち検査しなければならない。
  • ブランク・レコードの表示/非表示などの制御が複雑となる

このように処理を自分で複雑にしてしまい、最後にはバグを誘発することは必至である。
原因は最初にわからないままに SFLINZ を使ったことである。
SFLレコードをただただ追加するだけの処理にしておけば SFLレコードの処理は
大変やさしく安全なものになる。
いくら社内で SFLINZ が使われているからといって SFLINZ を使う正しい理由はどこにもなく
ただ処理を複雑なものにするばかりである。

正しい SFLレコードの処理は、

SFLCLRWRITE 命令で SFLレコードを追加

と覚えておこう。

SFLINZ を使っていたら、それは間違い

と考えて差し支えない。
過去に SFLINZ が必要であったことは一度もない。
誤解を解いて高品質なプログラム開発を進めて欲しい。