RECEIVE PACKET

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11 (Modified)


RECEIVE PACKET ({DocRef; }receiveVar; stopChar | numChars)

引数説明
DocRefDocRefドキュメント参照番号, または
カレントチャンネル (シリアルポートまたはドキュメント)
receiveVar文字変数 | BLOB変数データを受け取る変数
stopChar | numChars文字 | 数値受信を停止する文字, または
受信する文字数

説明

RECEIVE PACKET コマンドは、シリアルポートまたはドキュメントから文字を読み込みます。

docRefを指定した場合、このコマンドはOpen document, Create document または Append documentで開かれたドキュメントから文字を読み込みます。docRefを指定しない場合、このコマンドはSET CHANNELコマンドで開かれたシリアルポートかドキュメントから文字を読み込みます。

読み込み元に関わらず、読み込まれた文字は、テキスト、文字、またはBLOB型のreceiveVar変数に返されます。文字がSEND PACKET コマンドで送信された場合、型はパレットが送信された際の型に対応しなければなりません。

Notes:

・非Unicodeモード (互換モード) では、文字変数は固定長の最大255バイトまでです。テキスト変数は固定長を持たず32,000バイトまでを受け入れます。

・受信したパケットがBLOB型の場合、コマンドはUSE ASCII MAP コマンドで指定された文字セットを考慮しません。BLOBには変更されないデータが返されます。

特定の文字数まで読み込むためには、numCharsにその文字数を渡します。receiveVarがテキスト型の場合、一回の呼び出しで、Unicodeモードでは2GBのテキストを、非Unicodeモードでは32,000バイトまで読み込めます。この場合、最大文字数を指定するためにMAXTEXTLENBEFOREV11numCharsに渡せます。

特定の文字列(1桁以上の文字で構成される)が現われるまで文字を読み込むには、stopCharにその文字列を渡します(この文字列はreceiveVarに含まれません)。

この場合、stopCharで指定した文字を見つけることが出来ないければ:

RECEIVE PACKETがドキュメントを読み込むとき、ドキュメントの最後で読み込みを終了します。

RECEIVE PACKETがシリアルポートから読み込むとき、タイムアウト (SET TIMEOUT参照) に達するか、または利用者が割込(以下を参照)をかけるまで待ち続けます。

RECEIVE PACKETの実行中、利用者はCtrl+Alt+Shift (Windows) またはコマンド+Option+Shift (Macintosh)キーを押下することで、割込をかけることが出来ます。割込が発生するとエラー-9994が生成され、ON ERR CALLでインストールされたエラー処理メソッドでとらえることができます。通常、シリアルポートで通信している場合のみ、割込を処理します。

ドキュメントを読み込む場合、最初のRECEIVE PACKETコマンドは、ドキュメントファイルの先頭から読み込みを開始します。その後のデータ読み込みは、最後に読み込まれた文字の次から開始します。

Note: このコマンドは、SET CHANNELを用いて開かれたドキュメントに対して有効です。一方で、Open document, Create document あるいは Append documentで開かれたドキュメントに関しては、Get document positionSET DOCUMENT POSITIONコマンドを使用して、次の書き込み (SEND PACKET) や読み込み (RECEIVE PACKET) を行うドキュメント中の位置を取得したり設定したりできます。

ファイルの最後を越えて読み込もうとした場合、RECEIVE PACKETは、そのポイントまでに読み込んだデータを返し、システム変数OKに1を代入します。その次のRECEIVE PACKETは空の文字列を返し、システム変数OKに0を代入します。

Note: 非Unicodeモード (互換モード) で、WindowsのドキュメントをRECEIVE PACKETコマンドを使って文字を読み込む際で、Windows文字をMacintosh文字へ変換するためにASCIIマップを使用しない場合は、Win to Mac関数を使用できます。

例題

1. 以下の例は、20バイトのデータをシリアルポートから読み込み、変数getTwentyに格納します:

   RECEIVE PACKET (getTwenty; 20)

2. 以下の例は、変数myDocで参照されるドキュメントからデータを読み込み、変数vDataに格納します。ここでは改行が見つかるまで読み込みます:

   RECEIVE PACKET (myDoc;vData;Char (Carriage Return))

3. 以下の例は、変数myDocで参照されるドキュメントからデータを読み込み、変数vDataに格納します。HTMLタグ</TD>(テーブルセルの終わり)が現われるまでデータを読み込みます:

   RECEIVE PACKET (myDoc;vData;"</TD>")

4. 以下の例は、ドキュメントファイルから読み込んだデータをフィールドに格納します。データは、固定長で格納されています。このメソッドは、サブルーチンを呼び出してデータの後ろに付随する不要なスペースを取り除きます:

   $vhDocRef := Open document ("";"TEXT")  ` TEXTドキュメントを開く
   If (OK=1)  ` ドキュメントが開かれたら
      REPEAT  ` データがなくなるまで繰り返す 
         RECEIVE PACKET ($vhDocRef; $Var1; 15)  ` 15文字読み込む
         RECEIVE PACKET ($vhDocRef; $Var2; 15)  ` 2番目のフィールドに同じことを行う 
         If (($Var1#"")|($Var2#""))  ` どちらかのフィールドが空でなければ
            CREATE RECORD([People])  ` レコードを作成 
            [People]First := Strip ($Var1)  ` 名を格納 
            [People]Last := Strip ($Var2)  ` 姓を格納 
            SAVE RECORD([People])  ` レコードを保存 
         End if 
      Until (OK =0) 
      CLOSE DOCUMENT ($vhDocRef)  ` ドキュメントを閉じる 
   End if

データの終わりのスペースは以下のStripメソッドで取り除きます:

   For ($i; Length ($1); 1; -1)  ` 文字の最後からループ 
      If ($1[[$i]] # " ")  ` スペースでなければ… 
         $i := -$i  ` ループを終了する 
      End if 
   End for 
   $0 := Delete string ($1; -$i; Length ($1))  ` スペースを削除

参照

Get document position, RECEIVE PACKET, SEND PACKET, SET DOCUMENT POSITION, SET TIMEOUT, USE CHARACTER SET.

システム変数またはセット

RECEIVE PACKET呼び出し後、エラーなしでパケットを受信すればOKシステム変数に1が、そうでなければ0が設定されます。


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次