RECEVOIR PAQUET

4D - Documentation   Français   English   German   Español   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant

version 11 (Modifiée)


RECEVOIR PAQUET ({docRef; }réceptVar; stopCar | nbCar)

ParamètreTypeDescription
docRefdocRefNuméro de référence de document ou canal
courant (port série ou document)
réceptVarVar chaîne |Var BLOBVariable devant recevoir les données
stopCar | nbCarAlpha | NumCaractère(s) au(x)quel(s) stopper la réception
des données ou Nombre de caractères à recevoir

Description

La commande RECEVOIR PAQUET lit des caractères depuis un port série ou un document.

Si docRef est spécifié, la commande récupère des caractères depuis un document ouvert par la fonction Ouvrir document, Creer document ou Ajouter a document. Si docRef est omis, la commande récupère des caractères depuis un port série ou un document ouvert par la commande REGLER SERIE.

Dans tous les cas, les caractères lus sont retournés dans la variable réceptVar, qui doit être une variable de type Texte, Alpha ou BLOB. Si les caractères ont été envoyés par la commande ENVOYER PAQUET, le type doit correspondre à celui du paquet envoyé.

Notes :

En mode non Unicode (mode compatibilité), les variables alpha acceptent jusqu'à 255 caractères et ont une taille fixe, les variables texte n'ont pas de taille prédéfinie et acceptent jusqu'à 32000 caractères.

Si le paquet reçu est de type BLOB, la commande ne tient pas compte du jeu de caractères éventuellement défini par la commande UTILISER FILTRE. Le BLOB est retourné sans aucune modification.

Si vous voulez recevoir un nombre prédéfini de caractères, passez ce nombre dans le paramètre nbCar. Si la variable réceptVar est de type Texte, vous pouvez lire en un seul appel jusqu'à 2 Go de texte en mode Unicode ou 32000 caractères en mode non Unicode (dans ce cas, pour spécifier le nombre maximum de caractères, vous pouvez passer la constante MAXLONGTEXTEAVANTV11 dans nbCar).

Si vous voulez recevoir des caractères jusqu'à ce qu'une chaîne de caractères (comportant un ou plusieurs caractères) soit lue, passez-la dans le paramètre stopCar (la chaîne n'est pas retournée dans réceptVar).

Dans ce cas, si la chaîne de caractères spécifiée par stopCar n'est pas trouvée :

lorsque RECEVOIR PAQUET lit un document, l'exécution de la commande se terminera à la fin du document.

lorsque RECEVOIR PAQUET lit des données en provenance du port série, la commande s'exécutera indéfiniment jusqu'à ce que le délai d'attente (s'il est fixé) soit écoulé (cf. la commande FIXER TIMEOUT) ou que l'utilisateur interrompe la réception (voir ci-dessous).

Pendant l'exécution d'un RECEVOIR PAQUET, l'utilisateur peut interrompre l'opération en appuyant sur les touches Ctrl+Alt+Maj (sous Windows) ou Commande+Option+Maj (sous Mac OS). Cette interruption génère une erreur –9994 que vous pouvez intercepter à l'aide d'une méthode installée par la commande APPELER SUR ERREUR. Généralement, vous devez gérer les interruptions d'une réception uniquement lors d'une communication série.

Lors de la lecture d'un document, le premier RECEVOIR PAQUET commence par lire le début du document. La lecture des paquets suivants débute au caractère situé immédiatement après le dernier caractère lu.

Note : Ce fonctionnement est valide avec un document ouvert par REGLER SERIE. Cependant, pour un document ouvert par Ouvrir document, Creer document ou Ajouter a document, vous pouvez aussi utiliser les commandes Position dans document et CHANGER POSITION DANS DOCUMENT pour connaître et modifier la position à laquelle, dans le document, la prochaine écriture (ENVOYER PAQUET) ou lecture (RECEVOIR PAQUET) aura lieu.

En cas de tentative de lecture après la fin d'un document, RECEVOIR PAQUET retourne les données lues jusqu'à ce point et la variable système OK prend la valeur 1. Les RECEVOIR PAQUET suivants retourneront une chaîne vide et OK prendra la valeur zéro.

Note : En mode non Unicode (compatibilité), lorsque vous lisez des caractères d'un document Windows avec RECEVOIR PAQUET, si vous n'utilisez pas de filtre ASCII d'importation pour convertir les caractères Windows vers Mac OS (cf. la commande UTILISER FILTRE), vous pouvez utiliser la fonction Windows vers Mac (voir l'exemple de cette fonction).

Exemples

(1) L'exemple suivant lit 20 caractères depuis un port série et les place dans la variable RécupVingt :

   RECEVOIR PAQUET (RécupVingt; 20)

(2) L'exemple suivant lit des données depuis le document référencé par la variable MonDoc et les place dans la variable vData. La commande récupère les données jusqu'à ce qu'elle rencontre un retour chariot :

   RECEVOIR PAQUET (MonDoc; vData; Caractere (Retour chariot))

3) L'exemple suivant lit des données du document référencé par la variable MonDoc et les place dans la variable vData. La commande récupère les données jusqu'à ce qu'elle rencontre une balise HTML de fin de tableau (</TD>) :

   RECEVOIR PAQUET (MonDoc; vData; "</TD>")

(4) L'exemple suivant lit des données d'un document et les place dans des champs. Les données sont stockées dans des champs de longueur fixe. La méthode fait appel à une sous-routine pour éliminer les espaces superflus (situés derrière les valeurs). Le code de la sous-routine est présenté après la méthode :

   $Doc := Ouvrir document ("";"TEXT")   ` Ouverture d'un document de type Texte 
   Si (OK=1)    ` Si le document est ouvert… 
      Repeter  ` Boucle jusqu'à ce qu'il n'y ait plus de données 
         RECEVOIR PAQUET ($Doc; $Var1; 15)    ` Lecture de 15 caractères 
         RECEVOIR PAQUET ($Doc; $Var2; 15)    ` Même chose pour le second champ
         Si (OK = 1)    ` Si ce n'est pas la fin du document… 
            CREER ENREGISTREMENT([Personnes])   ` Créer un nouvel enregistrement 
            [Personnes]Prénom := Elimine ($Var1)   ` Sauvegarder le prénom 
            [Personnes]Nom := Elimine ($Var2)   ` Sauvegarder le nom 
            STOCKER ENREGISTREMENT([Personnes])   ` Sauvegarder l'enregistrement 
         Fin de si 
      Jusque (OK =0) 
      FERMER DOCUMENT ($Doc)    ` Fermeture du document 
   Fin de si

Les espaces superflus derrière les valeurs sont éliminés par la méthode suivante, appelée Elimine :

   Boucle ($i; Longueur ($1); 1; -1)   ` Boucle sur la fin de la chaîne d'où démarrer
      Si ($1[[$i]] # " ")   ` Si ce n'est pas un espace… 
         $i := -$i   ` Forcer la boucle à stopper
      Fin de si 
   Fin de boucle 
   $0 := Supprimer chaine($1; -$i;Longueur($1))    ` Suppression des espaces

Référence

CHANGER POSITION DANS DOCUMENT, ENVOYER PAQUET, FIXER TIMEOUT, Position dans document, RECEVOIR PAQUET, UTILISER FILTRE.

Variables et ensembles système

Après un appel à RECEVOIR PAQUET, la variable système OK prend la valeur 1 si le paquet est reçu sans erreur. Sinon, OK prend la valeur 0.


4D - Documentation   Français   English   German   Español   4D v11 SQL, Commandes par thèmes   4D v11 SQL, Liste alphabétique des commandes   4D v11 SQL, Constantes par thèmes   Retour   Précédent   Suivant