Manuel §2.1.25🗏    

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.