BLOB to list
BLOB to list ( blob {; offset} ) -> Résultat
Paramètre | Type | Description | |
---|---|---|---|
blob | Blob | → | BLOB contenant la liste hiérarchique |
offset | Integer | ↔ | Offset (en octets) dans le BLOB |
Nouvel offset après la lecture | |||
Résultat | Integer | ← | Référence de la liste nouvellement créée |
Cette commande n'est pas thread-safe, elle ne peut pas être utilisée dans du code préemptif.
Description
BLOB to list crée une nouvelle liste hiérarchique avec les données stockées dans le BLOB blob à l'offset d'octet (à partir de zéro) spécifié par offset et retourne un numéro de référence de liste hiérarchique pour cette nouvelle liste.
Les données présentes dans le BLOB doivent être compatibles avec la commande : généralement, vous utilisez des BLOBs préalablement remplis avec la commande LIST TO BLOB.
Si vous ne passez pas le paramètre optionnel offset, les valeurs de la liste sont lues à partir du début du BLOB. Si vous gérez un BLOB dans lequel plusieurs variables ou listes ont été stockées, vous devez passer le paramètre offset ainsi qu'une variable numérique. Avant l'appel, fixez cette variable numérique à l'offset désiré. Après l'appel, cette même variable numérique retourne l'offset de la variable suivante stockée dans le BLOB.
Après l'appel, la variable OK prend la valeur 1 si la liste hiérarchique a été correctement créée. Si l'opération ne peut pas être effectuée à cause, par exemple, d'un manque de mémoire, la variable OK prend la valeur 0.
Note pour l'indépendance de plate-forme : BLOB to list et LIST TO BLOB utilisent un format interne 4D pour gérer les listes stockées dans des BLOBs. L'avantage est que vous n'avez pas besoin de vous soucier de la conversion des octets ("byte swapping") entre les plates-formes lorsque vous utilisez ces deux commandes. Autrement dit, avec ces commandes, un BLOB créé sous Windows peut être réutilisé sous Mac OS et vice-versa.
Exemple
Dans l'exemple suivant, la méthode d'un formulaire entrée extrait une liste d'un champ BLOB avant que le formulaire ne s'affiche puis le stocke dans le champ BLOB lorsque la saisie est validée :
// Méthode du formulaire [Choses à Faire];"Entrée"
Case of
:(FORM Event=On Load)
hListe:=BLOB to list([Choses à Faire]Idées)
If(OK=0)
hListe:=New list
End if
:(FORM Event=On Unload)
CLEAR LIST(hListe;*)
:(bValider=1)
LIST TO BLOB(hListe;[Choses à Faire]Idées)
End case