4D v16.3

RECEIVE PACKET

Home

 
4D v16.3
RECEIVE PACKET

RECEIVE PACKET 


 

RECEIVE PACKET ( {DokRef ;} EmpfangeVar ; StopChar | NumBytes ) 
Parameter Typ   Beschreibung
DokRef  DokRef in Referenznummer des Dokuments oder aktueller Kanal (serielle Schnittstelle oder Dokument)
EmpfangeVar  Textvariable, BLOB Variable in Variable zum Empfangen des Textes
StopChar | NumBytes  String, Lange Ganzzahl in Zeichen, bis zu dem Daten empfangen werden, oder Anzahl zu empfangender Bytes

Der Befehl RECEIVE PACKET liest die Daten von einer seriellen Schnittstelle oder von einem Dokument.

Ist DokRef definiert, findet dieser Befehl Daten aus einem Dokument, das mit Open document, Create document oder Append document geöffnet wurde. Ist DokRef nicht definiert, findet dieser Befehl Daten aus einer seriellen Schnittstelle oder einem Dokument, das mit SET CHANNEL geöffnet wurde.

Die eingelesenen Zeichen werden, unabhängig von der Quelle, in EmpfangeVar zurückgegeben. Dies muss eine Variable von Typ Text, String oder BLOB sein. Wurden die Zeichen über den Befehl SEND PACKET gesendet, muss der Typ zu dem des gesendeten Pakets passen.

Hinweise:

  • Ist das empfangene Paket vom Typ BLOB, berücksichtigt es keine Zeichen, die über USE CHARACTER SET angegeben wurden. Das BLOB wird ohne Änderung gesendet.
  • Ist das empfangene Paket vom Typ Text, unterstützt RECEIVE PACKET BOMs (Byte Order Marks). Ist in diesem Fall der aktuelle Zeichensatz vom Typ Unicode (UTF-8, UTF-16 oder UTF-32), versucht 4D unter den ersten empfangenen Bytes ein BOM zu identifizieren. Wurde es gefunden, wird es aus dem Ergebnis gefiltert und 4D verwendet den hier definierten Zeichensatz statt des aktuellen.

Um eine bestimmte Anzahl Zeichen einzulesen, übergeben Sie diese Anzahl in NumBytes. Ist die Variable EmpfangeVar vom Typ Text, können Sie in einem Aufruf theoretisch bis zu 2 GB Text einlesen.

Um Zeichen bis zu einem bestimmten String einzulesen (bestehend aus ein oder mehreren Zeichen), übergeben Sie diesen String in StopChar. Er wird nicht in EmpfangeVar zurückgegeben.

Wird der in StopChar angegebene String nicht gefunden, gilt folgendes:

  • Beim Lesen eines Dokuments stoppt RECEIVE PACKET am Ende des Dokuments.
  • Beim Auslesen von Daten aus einer seriellen Schnittstelle wartet RECEIVE PACKET unendlich, bis ein Timeout eintritt (siehe SET TIMEOUT) oder bis der Benutzer den Empfang abbricht.

Beim Ausführen von RECEIVE PACKET kann der Benutzer dem Empfang durch gleichzeitiges Drücken der Strg-, Alt- und Umschalttaste bzw. auf Macintosh der Wahl-, Befehls- und Umschalttaste unterbrechen. Die Unterbrechung generiert den Fehler -9994. Sie können ihn mit einer Fehlerverwaltungsmethode, installiert mit ON ERR CALL, abfangen. Eine Unterbrechung des Empfangs ist in der Regel nur bei der Kommunikation über eine serielle Schnittstelle erforderlich.

Beim Auslesen eines Dokuments beginnt das erste RECEIVE PACKET am Anfang des Dokuments auszulesen. Alle darauffolgenden Datenpakete beginnen mit dem Zeichen, das auf das zuletzt gelesene Byte folgt.

Hinweis: Sie können diesen Befehl verwenden für ein Dokument, das mit SET CHANNEL geöffnet wurde. Für ein Dokument, das mit Open document, Create document oder Append document geöffnet wurde, können Sie mit den Befehlen Get document position und SET DOCUMENT POSITION die Position festlegen oder ändern, wo das nächste Auslesen (SEND PACKET) oder Einlesen (RECEIVE PACKET) stattfinden soll.

Versuchen Sie, über das Ende einer Datei hinaus zu lesen, gibt RECEIVE PACKET die gelesenen Daten bis zu diesem Punkt zurück und setzt die Systemvariable auf 1. Das nächste RECEIVE PACKET gibt eine leere Zeichenkette zurück und setzt die Systemvariable auf 0.

Folgendes Beispiel liest 20 Zeichen aus einer seriellen Schnittstelle in die Variable getTwenty:

 RECEIVE PACKET(getTwenty;20)

Folgendes Beispiel liest Daten aus dem in der Variablen myDoc zugewiesenen Dokument in die Variable vData. Ausgelesen wird bis zur Zeilenschaltung:

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

Folgendes Beispiel liest Daten aus dem in der Variablen myDoc zugewiesenen Dokument in die Variable vData. Ausgelesen wird bis zum HTML Tag </TD> (Ende der Tabellenzelle):

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

Folgendes Beispiel liest Daten von einem Dokument in Datenfelder. Die Daten werden in Datenfelder von fester Länge gespeichert. Die darin enthaltene Methode ruft eine Unterroutine auf, die schleifende Leerzeichen entfernt (Leerzeichen am Ende von Zeichenketten):

 $vhDocRef :=Open document("";"TEXT") ` Öffne ein TEXT Dokument
 If(OK=1) `Wurde das Dokument geöffnet
    Repeat ` Durchlaufe bis keine Daten mehr da sind
       RECEIVE PACKET($vhDocRef;$Var1;15) ` Lies 15 Zeichen
       RECEIVE PACKET($vhDocRef;$Var2;15) `Führe dasselbe für das 2. Feld aus
       If(($Var1#"")|($Var2#"")) `Ist mindestens eins der Felder nicht leer
          CREATE RECORD([People]` Erstelle neuen Datensatz
          [People]First :=Strip($Var1` Sichere den ersten Namen
          [People]Last :=Strip($Var2` Sichere den letzten Namen
          SAVE RECORD([People]` Sichere den Datensatz
       End if
    Until(OK=0)
    CLOSE DOCUMENT($vhDocRef` Schließe das Dokument
 End if

Nachfolgende Methode Strip entfernt die Leerzeichen am Ende der Daten:

 For($i;Length($1);1;-1) ` Durchlaufe vom Ende des Zeichensatzes bis zum Start
    If($1[[$i]]#" ") ` Ist kein Leerzeichen vorhanden
       $i :=-$i  ` Beende die Schleife
    End if
 End for
 $0:=Delete string($1;-$i;Length($1)) ` Lösche die Leerzeichen

Nach Aufrufen von RECEIVE PACKET hat die Systemvariable OK den Wert 1, wenn das Datenpaket ohne Fehler empfangen wurde. Wurde die Kommunikation unterbrochen oder bei einem Übertragungsfehler hat OK den Wert 0.



Siehe auch 

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

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Kommunikation
Nummer: 104

Dieser Befehl ändert die Systemvariable OKThis command can be run in preemptive processesDer Unicode Modus betrifft diesen Befehl

 
GESCHICHTE 

Geändert: 4D v11 SQL
Geändert: 4D v12

 
SCHLÜSSELWÖRTER 

BOM

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)