Fonction WriteBlob
La fonction WriteBlob [1] permet d'écrire dans la zone réservée d'un blob des données issues soit d'une variable de type Blob, soit d'un tableau de variables élémentaires.
WriteBlob( BlobField, Variable {, Nombre {, NombreDeColonne}}): status;
La fonction rend 1 si l'opération a pu s'effectuer.
Suivant le type de blob et le type de variable transmise les paramètres attendues sont les suivants
Type de blob |
Type de variable |
Paramètres |
Description |
---|---|---|---|
Void |
Blob |
Pas de paramètre |
Le zone de données binaires est recopiée |
String |
La chaine est recopiée dans le blob |
||
Autres |
Sans intérêt |
||
List Vector |
Blob |
Pas de paramètre |
Sans intérêt |
Tableau à une dimension |
Nombre définit le nombre d'éléments utiles dans le tableau. |
Chaque cellule du tableau est formatté dans une cellule du Blob |
|
Tableau à deux dimensions |
Sans intérêt |
||
Array |
Blob |
Pas de paramètre |
Sans intérêt |
Tableau à une dimension |
Nombre définit le nombre d'éléments utiles dans le tableau. |
Chaque cellule du tableau est formattée dans une cellule du Blob |
|
Tableau à deux dimensions |
Nombre définit le nombre de lignes utiles et NombreDeColonne définit le nombre de colonnes utiles. |
Chaque cellule du tableau est formattée dans une cellule du Blob |
|
Graphe |
Blob |
Sans intérêt |
|
Tableau à une dimension |
Nombre définit le nombre de lignes utiles |
Chaque cellule du tableau est formatté dans une cellule du Blob [2] |
|
Tableau à deux dimensions |
Nombre définit le nombre de lignes utiles |
La première colonne contient la liste des abscisses qui n'est pas écrite [3] , seule la deuxième colonne est écrite |
|
Curve |
Blob |
Sans intérêt |
|
Tableau à une dimension |
Sans intérêt |
||
Tableau à deux dimensions |
Nombre définit le nombre de lignes utiles, la deuxième dimension n'est pas précisée car elle vaut obligatoirement 2. |
Chaque cellule du tableau est formatté dans une cellule du Blob [4] |
Dans le cas d'un blob de type List, Vector ou Array, si le nombre de cellules allouées par la fonction NewBlob est insuffisant la fonction indique un compte-rendu d'erreur et n'affecte que les cellules allouées, inversement si la source ne contient pas assez de cellules le Blob ne sera pas complétement rempli mais on conservera néanmoins ses nouvelles dimensions.
Par exemple:
Declare Function CamGet Lib “Camera.dll” ( &String, &Integer); Var Photo; Adresse; Longueur;
...
On ... do begin // Obtention de l'adresse et de la longueur de la zone // dans laquelle est enregistrée la photo de la camèra CamGet( Adresse, Longueur); // Association à la variable Photo WriteBlob( Photo, Adresse, Longueur); Image = Photo; // Affectation de variable blob Produits.NewBlob( Produits.PhotoSoudure, BlobLen( Image)); Produits.WriteBlob( Produits.PhotoSoudure, Photo); end
La modification d'une variable en blob implique des allocations internes à Sisal avec recopie des données passées en paramètre; lors d'une affectation d'une variable par une variable Blob il y a aussi allocation de mémoire et recopie; de même lors du passage en paramètre par valeur à une fonction il y a recopie, c'est pour cette raison qu'il est conseillé de passer par adresse les variables nécessitant des allocations mémoires.
[1] A partir de la version 2.7
[2] Un graphe attend une suite de valeurs simples, les ordonnées; les abscisses ne sont pas transmises car elles sont toujours les même définies par le X0 et le dX de la déclaration du Blob dans le fichier de configuration.
[3] Un graphe attend un tableau de points; les abscisses ne sont pas analysées car elles sont définies par le domaine, seuls les ordonnées sont enregistrées. Inversement à la lecture d'un blob graphe (ReadBlob) dans un tableau à deux dimensions, la première colonne est remplie avec les valeurs calculées des abscisses, la deuxième est remplie avec les valeurs enregistrées.
[4] Une courbe attend toujours un tableau de points, la première colonne contient les abscisses et la seconde les ordonnées; les deux colonnes sont enregistrées.