VisualStudio C#とMySQL or SQLiteで競馬ソフトを作ってみる。そのメモ。

基本情報

JV-Dataの読み込み。

【構文】

Long JVRead( String 型 buff , Long 型 size , String 型 filename );

【パラメータ】

buff
呼出側で用意したデータ格納バッファを指定します。1行単位で読み出しますので改行コード(0x0d,0x0a)を含めたレコードデータが収容可能なサイズ+1(ストリング終端文字 NULL)を用意します。
size
呼出側で用意したデータ格納バッファにコピーするデータの長さを指定します。この値がレコード長よりも小さい場合には残りのデータは切り捨てられ、データ格納バッファの最後の1バイトがストリング終端文字 NULL となります。
filename
現在読み込み中のファイル名が JVRead から返されます。

【戻り値】

正常にレコードを読み込んだ場合はバッファーにセットされたデータのバイト数が返ります。

読み込んでいるファイルが次のファイルに切り替わる際には−1が返ります。全てのファイルを読み終わると0が返ります。

エラーが発生した場合にはエラーの理由コードとして負の数が返されます。(「コード表」参照)

−1の戻り値は実際には物理ファイルの終わりに返されるので、全てのファイルの終わりには一度−1が返った後、次の呼び出しで0が返されます。
戻り値意味原因と対処
0以上正常(バッファにセットしたデータのサイズ)
全ファイル読み込み終了(EOF)JVOpen で取得した全てのデータの終わりを示しています。
読み込み処理を終了してください。
−1ファイル切り替わりエラーではありません。
物理ファイルの終わりを示しています。
バッファーにはデータが返されませんのでそのまま読み込み処理を続行してください。
−3ファイルダウンロード中読み出そうとするファイルがダウンロードの最中です。
少し待ってから読み込みを再開してください。
−201JVInitが行なわれていないJVRead/JVGets に先立ってJVInit/JVOpen が呼ばれていないと思われます。
必ずJVInit/JVOpenを先に呼び出してください。
−202前回のJVOpen/JVRTOpen/JVMVOpen に対してJVClose が呼ばれていない(オープン中)前回呼び出したJVOpen/JVRTOpen/JVMVOpen がJVClose によってクローズされていないと思われます。
JVOpen/JVRTOpen/JVMVOpen を呼び出した後、別のOpenを呼び出す場合、先にJVCloseを呼び出してください。
−203JVOpenが行なわれていないJVRead/JVGets に先立ってJVOpen が呼ばれていないと思われます。
必ずJVOpenを先に呼び出してください
−402ダウンロードしたファイルが異常(ファイルサイズ=0)ダウンロード中に何らかの問題が発生しファイルが異常な状態になったと思われます。
JVFileDeleteで該当ファイル(JVRead/JVGets から戻されたファイル名)を 削除し、再度JVOpen からの処理をやりなおしてください。
−403ダウンロードしたファイルが異常(データ内容)同上
−502ダウンロード失敗(通信エラーやディスクエラーなど)ダウンロード処理に失敗しました。エラーの原因を除去しないかぎり解決しないと思われます。
原因を除去できたらJVClose を呼び出し、JVOpen からの処理をやりなおしてください。
サーバーが混雑している場合のタイムアウトでもこの戻り値が返されることがあります。
−503ファイルが見つからないJVOpen からJVRead/JVGets までの間に読み出すべきファイルが削除された、または該当ファイルが使用中と思われます。
JVOpen からやりなおせば解消しますが、削除された原因を除去するを除去する必要があります。

【解説】

JVOpen / JVRTOpen で準備した JV-Data を現在のファイルポインタから1行分読み出します。
JVOpen / JVRTOpen を行なわずに JVRead メソッドを呼び出すとエラーが返ります。

JVOpen ではデータ種別IDが複数指定できるため、JVRead メソッドは物理的には複数のファイルで あっても1つのファイルであるかのように連続してデータを読み出します。
ただし、ファイル間をまたぐごとに戻り値としてファイル切り替わり(−1)が返り、全てのファイルを読 み終わった際に戻り値として EOF(0)が返ります。

例えば「2002 年 11 月 10 日以降現在までの RACE データ」を指定して読み出した場合に、レース詳細データが 36 件存在したとすると1回目から 36 回目の呼出しまではレース詳細のレコードが 1 行ずつバッファにセットされ、37 回目の呼び出しでファイル切り替わり(−1)が返されます。
38 回目以降の呼出しには馬毎レース情報がセットされます。全てのレコードが無くなった時点で EOF(0)が返されます。

【補足】

JVRead では、渡されたデータ格納バッファは JV-Link 内にて解放し、新たに確保したバッファを buffに割り当てられます。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

メンバーのみ編集できます