BHT-BASIC4.0:データファイルの検索について(SEARCH関数)

データファイルの読み込みで、最初に既に入力されているコードを検索し、 そのコードに対応したレコード番号で行う場合があります。 データのメンテナンス処理ではこの方法が普通かと思います。

今回は標準関数の SEARCH関数 を使ってみます。

■SEARCH関数について

SEARCH関数の定義は以下の様です。
SEARCH([#]<ファイル番号>,<フィールド変数>,<検索データ>[,<開始レコード>])

 <ファイル番号>:1~16の値を返す数値式
      (OPEN命令で指定したファイル番号を指定)
 <フィールド変数>:文字型単純変数
      (FIELD命令の前に宣言されている変数を指定)
 <検索データ>:文字列式

 <開始レコード>:数値式
      (検索を開始するレコードの番号を指定、省略時は先頭から)

 返す値:検索できたレコード番号、見つからない場合は0が返る
      (返す値は長整数型変数か実数型変数で代入)

データファイルからコードを指定し検索する関数を以下の様に定義します。

SEARCH関数 に指定する検索データは、 関数[MfPutData%]でコードの後ろにスペースを付加したので、その処理を行っています。
この時、ワーク変数の W$ を宣言していますが、 引き数の変数 pstrCD$ は、 コール元で代入された文字列長分しかサイズが無いので、 それ以上の長さの文字列を代入できないためです。

レコード番号の指定が0の場合は、ファイルの先頭からの検索を行います。

GcTEST.DAT$ 等の定数定義等に付いては以下の記事を参照して下さい。
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)

■検索関数の利用

上記の検索関数の動作をテストするソースを以下に記します。

2番目の検索から分かるように、コードは順番に並んでいなくても検索できています。 つまり SEARCH関数 は、指定されたレコード位置からベタに検索し、 指定された検索データが等しいものが見つかった時点で、検索を止めるようです。

SEARCH関数 は特にバイナリサーチで行うわけではないので、 データ件数が多くて最後の方に目的のものが在る場合、時間が掛かるはずです。

ハンディターミナルで入力されたデータを検索する場合は、 そこまで入力件数が多いわけではないと思うので、 この SEARCH関数 でも 問題無いのでしょう。
このソースの実行結果は以下の図の様になります。
151
※尚、バイナリサーチに関しては、 拡張関数の中にバイナリサーチ処理関数(BSEARCH.FN3)があり、 これを使えば可能です。 この関数の使い方については別の記事で紹介します。

転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】


■関連記事
BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
BHT-BASIC4.0:変数宣言の書き方(BHT-1300)
BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
BHT-BASIC4.0:演算子について(BHT-1300)
BHT-BASIC4.0:画面への表示について(BHT-1300)
BHT-BASIC4.0:キー入力について(BHT-1300)
BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
BHT-BASIC4.0:文字列を扱うユーザ定義関数について
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について

楽天市場


デル株式会社
コメント(0)