前回はバイナリサーチ(SEARCH.FN3)の紹介を行いましたが、
この検索では1個のコードに対して処理する機能しかありません。
コードは昇順にしないとバイナリサーチは利用できないので、 1レコードの中に複数コードが存在しソートできない場合などのデータファイルの場合には利用できません。
複数コードの条件付けを行い検索できるのが、 拡張関数の サーチ処理関数(SEARCH.FN3) です。 今回はこの拡張関数について説明します。
この関数は以下の4個の機能があります。
「レコード番号検索」と「件数のみ検索」で関数に渡す引数の書式が異なります。
今回の検索関数を使用する例のために以下の様なデータファイルを想定します。 これは今まで使ってきたTEST.DATに削除フラグを追加しています。 ファイル名はTEST2.DATとします。
サーチ処理関数(SEARCH.FN3) を使う上で OR条件 よりも AND条件 を 使う方が多いと思うので、 AND条件 を例にとります。
品番と削除フラグの AND条件 でデータファイル( TEST2.DAT ) を検索する 関数が以下の様になります。 関数コールの書式は検索条件に文字列配列を使った「書式2」で行っています。
最初のテストデータの書き込みで使っている関数 MfPutData2% は、 下の方にソースがありますのでそちらを参照下さい。 また、これによって作成された TEST2.DAT は以下の図の様になります。 (デバッガ上でのシミュレーションでのファイル参照ですが)
品番コードと削除フラグの指定を合わせて検索しています。
このソースの実行結果は以下の図の様になります。
関数 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等)とのデータファイルの送受信について
コードは昇順にしないとバイナリサーチは利用できないので、 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 は、整数型(%),長整数型(&),実数型(指定無し)が使用可能
<引き数>
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 は以下の図の様になります。 (デバッガ上でのシミュレーションでのファイル参照ですが)
品番コードと削除フラグの指定を合わせて検索しています。
このソースの実行結果は以下の図の様になります。
関数 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等)とのデータファイルの送受信について