BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方

前回はバイナリサーチ(SEARCH.FN3)の紹介を行いましたが、 この検索では1個のコードに対して処理する機能しかありません。
コードは昇順にしないとバイナリサーチは利用できないので、 1レコードの中に複数コードが存在しソートできない場合などのデータファイルの場合には利用できません。

複数コードの条件付けを行い検索できるのが、 拡張関数の サーチ処理関数(SEARCH.FN3) です。 今回はこの拡張関数について説明します。

■サーチ処理関数(SEARCH.FN3)について

この関数は以下の4個の機能があります。
機能番号 処理内容
.fcAndSrch 1 「AND」サーチ(レコード番号検索)
.fcOrSrch 2 「OR」サーチ(レコード番号検索)
.fcAndSrchN 11 「AND」サーチ件数(件数のみ検索)
.fcOrSrchN 12 「OR」サーチ件数(件数のみ検索)

「レコード番号検索」と「件数のみ検索」で関数に渡す引数の書式が異なります。
[書式1]
 CALL "SEARCH.FN3" .fcAndSrch FILENO%, RSTART, REND, RECORD, STRING1$, STRING2$...

  RSTART, REND, RECORD は、整数型(%),長整数型(&),実数型(指定無し)が使用可能

[書式2]
 CALL "SEARCH.FN3" .fcAndSrch FILENO%, RSTART, REND, RECORD, STRING$(), STRINGN%

  RSTART, REND, RECORD は、整数型(%),長整数型(&),実数型(指定無し)が使用可能
<引き数>
  .fcAndSrch:機能番号指定
  FILENO%   :ファイル番号
  RSTART    :検索開始レコード番号
  REND     :検索終了レコード番号
  FIELDNO%  :フィールド番号
  STRINGn$  :検索条件
  STRING$() :検索条件(配列指定時)
  STRINGN%  :検索条件数(配列指定時)

  STRINGn$やSTRING$()は「検索方法」+「フィールド番号」+「検索文字列」で指定します。
  「検索方法」、「フィールド番号」は数値を
CHR$関数
で文字列化

<戻り値>
  RECORDNO :検索結果(レコード番号)
  ・RECORDNO には、検索条件に一致するデータが見つかったレコード番号が返されます。
   見つからなかった場合、0 が返されます。
  ・RECORDNO は、整数型の最大値(32767)を超える場合あるので、
   変数に代入する場合、長整数型変数か実数型変数を推奨します

今回の検索関数を使用する例のために以下の様なデータファイルを想定します。 これは今まで使ってきたTEST.DATに削除フラグを追加しています。 ファイル名はTEST2.DATとします。
項目名 フィールド長 内容
品番 16 商品コードの文字列
数量 12 商品の数量を文字列で格納
削除フラグ 1 "1":削除済み 、 "0"削除されていない

サーチ処理関数(SEARCH.FN3)  を使う上で OR条件 よりも  AND条件 を 使う方が多いと思うので、  AND条件 を例にとります。
品番と削除フラグの AND条件  でデータファイル( TEST2.DAT ) を検索する 関数が以下の様になります。 関数コールの書式は検索条件に文字列配列を使った「書式2」で行っています。
■検索関数の利用
上記の検索関数の動作をテストするソースを以下に記します。

最初のテストデータの書き込みで使っている関数  MfPutData2% は、 下の方にソースがありますのでそちらを参照下さい。 また、これによって作成された TEST2.DAT は以下の図の様になります。 (デバッガ上でのシミュレーションでのファイル参照ですが)
202
品番コードと削除フラグの指定を合わせて検索しています。
このソースの実行結果は以下の図の様になります。
201
関数 MfPutData2% のソースです。

転職を本気で考えている方向けのプログラミングスクール!【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:データファイルの検索について(SEARCH関数)
BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について


楽天市場


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