Skip to main content

Format de stockage

Il existe deux implémentations de l'interface IDataStorage disponible: ASCIIDataStorage et BinaryDataStorage.

Dans les deux formats, la première variable stockée est la variable réservée ___xCompressTags de type BOOL. Sa valeur détermine si les chemins d'instance sont stockés compressés. Si un objet d'intégrité est écrit, il est alors écrit comme dernière variable nommée ___Integrity de type BOOL avec valeur TRUE. Toutes les variables persistantes, à l'exception de ces variables réservées, sont stockées dans l'ordre et triées selon leur chemin d'instance complet. Peu importe que les chemins d'instance soient compressés ou non.

Astuce

Si les données sont modifiées par l'utilisateur, il doit s'assurer que le bon ordre de tri sera maintenu.

Format ASCII

ASCIIDataStorage écrit chaque chemin d'instance des variables persistantes (éventuellement au format compressé), le type de données et la valeur sous forme de chaîne dans le fichier. Le nom et la date sont séparés par une tabulation (modifiable par paramètre codbySeparator). Lorsque l'archive est lue, une conversion sera exécutée. Par conséquent, le fichier peut être modifié en externe. Les lignes doivent être séparées par "\r\n" (convention Windows). Les lignes commençant par un point-virgule seront ignorées lors de la lecture - cette ligne ne sera pas ajoutée lors de l'écriture de l'archive.

Format d'un fichier ASCII :

{timestamp}\r\n
{instance path}{bySeparator}{Typ}:{value}\r\n
…
{instance path}{bySeparator}{Typ}:{value}\r\n

L'horodatage détermine l'heure à laquelle le stockage a été déclenché. Il est écrit sous la forme littérale DATE_AND_TIME (exemple : DT#2012-01-11-15:11:09)

Exemple 7. Exemple de fichier ASCII
ac_pm_ascii_file.png


Traitement de REAL et LREAL variables :

Les valeurs des variables sont écrites sous forme de littéraux ST. REAL et LREAL les valeurs sont traitées différemment, car la mise en œuvre de la conversion vers et depuis des fractions décimales sans perte de précision. Cependant pour éviter toute perte de précision et conserver la lisibilité et la possibilité de modifier le fichier ASCII, ces valeurs sont stockées au format hexadécimal. La fraction décimale (inexacte) est ajoutée derrière la valeur hexadécimale en guise de commentaire. Lors de la lecture du fichier, le format hexadécimal ainsi que le format décimal ST sont pris en charge. Cela permet à l'utilisateur de modifier la fraction décimale.

Le format hexadécimal est défini comme suit :

F16#{Mantissa}H{Exp} | F16#NaN | F16#+Inf | F16#-Inf
{Mantissa}   ::= {HexNumeral}
{Exp}        ::= {HexNumeral}
{HexNumeral} ::= [+-]?[1-9A-F][0-9A-F]*

Si m est la valeur de la mantisse et e la valeur de l'exposant est supérieure à la valeur du nombre m * 16^e.

Exemple 8. Exemple de valeur RÉELLE stockée

lr1 LREAL:F16#F0H-3 0.05859375



Format binaire

BinaryDataStorage enregistre les données au format binaire. L'horodatage suit cela (tapez DATE_AND_TIME). Après cela, les variables sont répertoriées.

Archives compressées

Les valeurs des variables sont stockées avec le chemin et le nom (dans le chemin il n'y a ni l'application ni le nom de l'appareil) dans une orthographe compacte pour économiser des ressources et du temps.

Dans tous les cas (compressés ou non), les chemins d'instance doivent être triés dans l'ordre du chemin d'instance complet. Cet ordre de tri est alphabétique, les indices de tableau étant triés numériquement.

Exemple 9. Exemples

Objets

Format compressé

Fb1.fb2.fb3.a

Fb1.fb2.fb3.a

Fb1.fb2.fb3.b

<b

Fb1.fb2.d

<<d

Fb4

FB4