データファイルの読み込みで、最初に既に入力されているコードを検索し、
そのコードに対応したレコード番号で行う場合があります。
データのメンテナンス処理ではこの方法が普通かと思います。
今回は標準関数の SEARCH関数 を使ってみます。
SEARCH関数の定義は以下の様です。
データファイルからコードを指定し検索する関数を以下の様に定義します。
SEARCH関数 に指定する検索データは、 関数[MfPutData%]でコードの後ろにスペースを付加したので、その処理を行っています。
この時、ワーク変数の W$ を宣言していますが、 引き数の変数 pstrCD$ は、 コール元で代入された文字列長分しかサイズが無いので、 それ以上の長さの文字列を代入できないためです。
レコード番号の指定が0の場合は、ファイルの先頭からの検索を行います。
GcTEST.DAT$ 等の定数定義等に付いては以下の記事を参照して下さい。
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
上記の検索関数の動作をテストするソースを以下に記します。
2番目の検索から分かるように、コードは順番に並んでいなくても検索できています。 つまり SEARCH関数 は、指定されたレコード位置からベタに検索し、 指定された検索データが等しいものが見つかった時点で、検索を止めるようです。
SEARCH関数 は特にバイナリサーチで行うわけではないので、 データ件数が多くて最後の方に目的のものが在る場合、時間が掛かるはずです。
ハンディターミナルで入力されたデータを検索する場合は、 そこまで入力件数が多いわけではないと思うので、 この SEARCH関数 でも 問題無いのでしょう。
このソースの実行結果は以下の図の様になります。
※尚、バイナリサーチに関しては、 拡張関数の中にバイナリサーチ処理関数(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等)とのデータファイルの送受信について
今回は標準関数の SEARCH関数 を使ってみます。
■SEARCH関数について
SEARCH関数の定義は以下の様です。
SEARCH([#]<ファイル番号>,<フィールド変数>,<検索データ>[,<開始レコード>])
<ファイル番号>:1~16の値を返す数値式
(OPEN命令で指定したファイル番号を指定)
<フィールド変数>:文字型単純変数
(FIELD命令の前に宣言されている変数を指定)
<検索データ>:文字列式
<開始レコード>:数値式
(検索を開始するレコードの番号を指定、省略時は先頭から)
返す値:検索できたレコード番号、見つからない場合は0が返る
(返す値は長整数型変数か実数型変数で代入)
<ファイル番号>:1~16の値を返す数値式
(OPEN命令で指定したファイル番号を指定)
<フィールド変数>:文字型単純変数
(FIELD命令の前に宣言されている変数を指定)
<検索データ>:文字列式
<開始レコード>:数値式
(検索を開始するレコードの番号を指定、省略時は先頭から)
返す値:検索できたレコード番号、見つからない場合は0が返る
(返す値は長整数型変数か実数型変数で代入)
データファイルからコードを指定し検索する関数を以下の様に定義します。
SEARCH関数 に指定する検索データは、 関数[MfPutData%]でコードの後ろにスペースを付加したので、その処理を行っています。
この時、ワーク変数の W$ を宣言していますが、 引き数の変数 pstrCD$ は、 コール元で代入された文字列長分しかサイズが無いので、 それ以上の長さの文字列を代入できないためです。
レコード番号の指定が0の場合は、ファイルの先頭からの検索を行います。
GcTEST.DAT$ 等の定数定義等に付いては以下の記事を参照して下さい。
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
■検索関数の利用
上記の検索関数の動作をテストするソースを以下に記します。
2番目の検索から分かるように、コードは順番に並んでいなくても検索できています。 つまり SEARCH関数 は、指定されたレコード位置からベタに検索し、 指定された検索データが等しいものが見つかった時点で、検索を止めるようです。
SEARCH関数 は特にバイナリサーチで行うわけではないので、 データ件数が多くて最後の方に目的のものが在る場合、時間が掛かるはずです。
ハンディターミナルで入力されたデータを検索する場合は、 そこまで入力件数が多いわけではないと思うので、 この SEARCH関数 でも 問題無いのでしょう。
このソースの実行結果は以下の図の様になります。
※尚、バイナリサーチに関しては、 拡張関数の中にバイナリサーチ処理関数(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等)とのデータファイルの送受信について