BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)

ハンディスキャナのプログラムとして当然データを入力するわけですが、 何処に格納するかと言えば、やはりファイルとしてハンディスキャナの内部に書き込むことになります。

最近私が作成したシステムでは、 パソコンとのデータは全てデータファイル(テキストファイル)でやり取りを行うことにしました。 出庫処理などでは、作成された指示データをパソコンからダウンロードし、 そのデータに従って出庫の作業を行います。 また、入庫処理では検品チェックを行い、 ハンディに入庫処理データを登録します。 入庫処理では作業が終わった時点で、パソコンにアップロードし 後処理をパソコン側で行う様にしました。

パソコンとハンディターミナルを切り離して作業ができるので 既存のシステムにハンディターミナルのシステムを付加する場合には有効だと思います。

ハンディターミナルにはLAN接続できるものもありますので、 直接データベースにアクセスして処理を行うこともできますが、今回は見送りました。

ファイルの操作は昔のBASICと同じように  OPEN命令 でファイル番号を指定してオープン処理を行います。 データの読み書きは GET/PUT命令 で必ずレコード単位で行います。 処理後は CLOSE命令 でファイルをクローズします。

ファイルの格納先は内部Flashメモリと外部のmicroSD カードがあります。 それぞれの制約は以下の通りです。
仕様項目 内部メモリ(Flash) 外部メモリ(microSD カード)
最大ファイル数 420個 FAT32準拠
フォルダ作成 不可 可能
ファイル名の使用可能文字 英数字のみ
英字は,大文字/小文字の区別無
英数字,文字,スペース,ピリオドと
22種類の特殊文字
ファイル名の長さ制限 ファイル名:1~8文字
拡張子:1~3文字
(ファイル名と拡張子をピリオドで繋ぐ
但し、拡張子が無い場合はピリオドは要らない)
255文字
(ドライブ名およびフォルダ名を含めた場合は、259文字)
ドライブ名 Aドライブ
Bドライブ
Dドライブ


データファイルのレコード、フィールドの制約は以下の通りです。

項目 制約内容
最大レコード件数 2,147,483,647(2G)※BHT搭載メモリサイズに依存
最大レコード長(バイト) 65,535
フィールド変数サイズ(文字) 8192
フィールド個数(個) 254

■レコードについて

レコードとはデータファイルを読み書きする時の基本単位で、データ1件分のことです。 レコードは FIELD命令 でフォーマットを定義します。 1レコードの最大長は、各フィールドのサイズの合計です。

■フィールド定義について

FIELD命令 の定義は以下の様になっています。
FIELD [#]<ファイル番号>,<フィールド幅> AS <フィールド変数>
            [,<フィールド幅> AS <フィールド変数>・・・]

 <ファイル番号>:1~16の値を返す数値式
      (OPEN命令で指定したファイル番号を指定)

 <フィールド幅>:1~8192 の値を返す数値式を指定
      (対応するフィールド変数の大きさ(バイト数)を指定)

 <フィールド変数>:文字型単純変数
      (FIELD命令の前に宣言されている変数を指定)


■OPEN命令について

説明が前後しますが OPEN命令 の定義は以下の様になっています。
OPEN <ファイル名> AS[#]<ファイル番号>[RECORD <ファイル長>]

 <ファイル名>:"[ドライブ名:]ファイル名[<S>]"の書式の文字列式
     ("ファイル名"は"ファイル名称"+"."+"拡張子")
     (<S>はフィールド末尾のスペース除去オプション
      ドライブ名に"D:\"指定のみ)

 <ファイル番号>:1~16の値を返す数値式

 <ファイル長>:1~2147483647の数値型定数
     (ファイルに登録できる最大レコード数を指定:未指定は1000個)

・同時にオープンできるのはバーコード、通信デバイスと合わせて16個までです。
・ファイル長は新規にファイルをオープンする時にしか機能せず、 既存のファイルをオープンする時には無視されます。

■CLOSE命令について

CLOSE命令 の定義は以下の様になっています。
CLOSE[[#]<ファイル番号>[,[#]<ファイル番号>...]]

 <ファイル番号>:1~16の値を返す数値式

・ファイル番号を省略するとオープン済みのファイルが全てクローズされます。
・クローズすればファイル番号は再利用可能です。
・オープンされていないファイル番号を指定しても、エラーは発生しません。
■PUT命令について

OPEN命令 CLOSE命令 はファイル操作の最初と最後の処理で、 実際にデータを書き込む命令としての PUT命令 があります。
PUT [#]<ファイル番号>[,<レコード番号>]

 <ファイル番号>:1~16の値を返す数値式
      (OPEN命令で指定したファイル番号を指定)

 <レコード番号>:1~2147483647の値を返す数値式
      (最小値:1、最大値:OPEN命令で指定した最大登録レコード数)

・レコードへの書込みは FIELD命令 で定義された、 フィールド変数を介して行われます。(PUTする前にフィールド変数へ値を設定します)
・レコード番号を省略すると、現在の最大レコード番号+1の位置にレコードが書き込まれます。
・レコード番号は順番通りに指定しなくても書込みはOKで、 飛ばしたレコード番号の位置のレコードには空白が設定されます。
・レコードはテキストデータ(ASCII文字列)しか扱えないので、 数値データは STR$関数 で文字列に変換してからフィールド変数に設定します。

■GET命令について

GET命令 の定義は以下の様になっています。
GET [#]<ファイル番号>[,<レコード番号>]

 <ファイル番号>:1~16の値を返す数値式
      (OPEN命令で指定したファイル番号を指定)

 <レコード番号>:1~2147483647の値を返す数値式
      (最小値:1、最大値:OPEN命令で指定した最大登録レコード数)

・ファイル番号で指定されたデータファイルから、レコード番号で指定されたレコードを読み込み、フィールド変数にデータを設定します。
・レコードが1件もないと実行時エラーが発生します。
・レコード番号を省略したときは、1つ前のGET命令で読んだレコード番号+1の番号のレコードが読まれます。
 (最終レコードの次をGETすると実行時エラーが発生します。)
・レコード番号が最大レコード数より大きいと実行時エラーが発生します。

■各命令の順番について

データファイルを扱う命令は基本的に以下の様な順番で行います。

(1)フィールド変数の宣言
(2) OPEN命令 
(3) FIELD命令 
(4) PUT命令 
(5) GET命令 
(6) CLOSE命令 

実際はこの順番でなくても良くて、PUT命令しかなかったり、GET命令だけの処理かもしれません。

以下の簡単なソースで例を示します。

このソースの実行結果は以下の図の様になります。 121
フィールド変数REC2$には文字列を多目に設定していますが、 あふれた分は無視されていることが分かります。
また、REC3$には文字列を少な目に設定しましたが、 GETした結果は同じ文字列が返ってきました。 データファイルの中身には足りない分には空白が入っているようですが、 実際に読みだすと削除されてくるようです。
もし空白も読み出したいのであれば、 REC3$の設定で後ろの方に空白文字列を付加する必要があります。

楽天市場

【DENSO】ハンディターミナルBHT-1306BWB+USB通信ユニットCU-1321+ACアダプタAD2+標準バッテリBT-130L-C【送料無料・代引手数料無料】【02P05Nov16】

価格: 208,980円
(2016/11/26 22:01時点 )


■関連記事
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:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
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)