SEND PACKET

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

version 11 (Modified)


SEND PACKET ({DocRef; }packet)

引数説明
DocRefDocRefドキュメント参照番号, または
カレントのチャンネル (シリアルポートまたはドキュメント)
packet文字 | BLOB送信する文字またはBLOB

説明

SEND PACKET は、シリアルポートやドキュメントにパケットを送ります。docRefを指定した場合、パケットはdocRefで参照されるドキュメントに書き込まれます。docRefを指定しない場合、あらかじめSET CHANNELコマンドで開かれたシリアルポートまたはドキュメントにパケットを書き込みます。

packetはデ−タの一部であり、一般的には文字列です。

packetにBLOBを渡すこともできます。これにより、テキストモードで送信される文字のエンコーディングに関連する制約を回避できます (例題 2参照)。

Note: packetにBLOBを渡す場合、コマンドはUSE ASCII MAP コマンドで定義された文字セットを考慮しません。BLOBは変更されずに送信されます。

SEND PACKETコマンドを使用する前に、SET CHANNELコマンドでシリアルポートやドキュメントを開くか、ドキュメントコマンドを使用してドキュメントを開かなければなりません。

既存のドキュメントに書き込む場合は、ドキュメントがAppend documentで開かれていない限り、最初のSEND PACKETコマンドはドキュメントの先頭から書き始めます。それに続くSEND PACKETコマンドは、ドキュメントファイルが閉じられるまでパケットを後ろに書き加えます。

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

重要: 非Unicode mode (互換モード) では、SEND PACKETはWindows と Macintosh両プラットフォームでMac OS ASCIIデータを書き込みます。Mac OS ASCIIデータは8ビットを使用します。標準ASCIIは下位7ビットしか使用しません。多くのデバイスはWindows/Macintoshと異なり、8ビットを使用しません。送信する文字列が8番目のビットを使用するデータを含む場合、ASCII文字を変換するASCIIマップを作成して、SEND PACKETの前にUSE ASCII MAPを実行してください。Mac to Win 関数を使用することもできます (詳細情報はこの関数の例題を参照してください)。XON/XOFFなどのプロトコルは、マイン間の通信を確立するために下位ASCIIコードを使用します。そのようなASCIIコードを送信しないように注意してください。これを行うとプロトコルを妨げ、通信が中断されることがあります。

例題

1. 以下の例は、フィールドのデータをドキュメントに書き込みます。この例では、固定長データとして書き込みます。固定長フィールドは常に決まった長さです。フィールドが指定した長さよりも短い場合、その分のスペースを埋め込みます(つまり、指定された長さになるまでスペースを付け加えます)。固定長データの使用は、データ格納の合理的な方法とはいえませんが、一部のコンピュータシステムやアプリケーションでは、まだ使用されています:

   $vhDocRef := Create document ("")  ` ドキュメントを作成 
   If (OK=1)  ` ドキュメントが作成されたら 
      For ($vlRecord; 1; Records in selection ([People]))  ` レコードごとに繰り返す
            ` パケット送信。名フィールドのデータを含む長さ15のパケットを作成
         SEND PACKET ($vhDocRef; Change string(15 * Char(SPACE); [People]First;1))
            ` 2つ目のパケット送信。姓フィールドのデータを含む長さ15のパケットを作成
         SEND PACKET ($vhDocRef; Change string (15 * Char(SPACE); [People]Last; 1)) 
         NEXT RECORD([People]) 
      End for
         ` Char(26)を送信、これはいくつかのコンピュータでend-of-fileのマーカとし使用されます
      SEND PACKET ($vhDocRef; Char(SUB ASCII Code))
      CLOSE DOCUMENT ($vhDocRef)  ` ドキュメントを閉じる
   End if

2. この例題はBLOB経由でドキュメントの拡張文字を送信したり受信したりする方法を示します:

   C_BLOB($send_blob)
   C_BLOB($receive_blob)
   TEXT TO BLOB("azerty";$send_blob;UTF8 Text without length)
   SET BLOB SIZE($send_blob;16;255)
   $send_blob{6}:=0
   $send_blob{7}:=1
   $send_blob{8}:=2
   $send_blob{9}:=3
   $send_blob{10}:=0
   $vlDocRef:=Create document("blob.test")
   If(OK=1)
      SEND PACKET($vlDocRef;$send_blob)
      CLOSE DOCUMENT($vlDocRef)
   End if
   $vlDocRef:=Open document(document)
      End(OK=1)
      RECEIVE PACKET($vlDocRef;$receive_blob;65536)
      CLOSE DOCUMENT($vlDocRef)
   End if

参照

Get document position, RECEIVE PACKET, SET DOCUMENT POSITION.


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