Putseq permet d'écrire des données à partir de variables sur un fichier binaire ouvert par Openo ou Openio.
Putseq exp_ent, liste_varia [ Using classe ]
Elément | Description | Restrictions |
exp_ent | Expression entière du nombre d'éléments à écrire. | Aucune. |
liste_varia | Liste de nom_de_variables à écrire séparées par le caractère ','. | Les variables ont au plus 1 dimension |
classe | Abréviation désignant le fichier ouvert. | Aucune. |
# Ecriture dans le fichier TEST, de 5 éléments d'une matrice de
# chaînes de caractères. Si une chaîne de caractères a une longueur
# inférieure à celle qui a été déclarée, elle sera complétée dans le
# fichier par des octets nuls (de code ascii 0)
Char Y (6) (4,3)
Openo filpath("TXT", "TEST", "")
Putseq 5 Y(0), Y(1,2), Y(2)
Openo
#
# Supposons que dans cet exemple, la variable Y soit initialisée de la
# façon suivante :
0 | 1 | 2 | |
Y (0, .) | zéro | Zéro | ZERO |
Y (1, .) | un | Un | UN |
Y (2, .) | deux | Deux | DEUX |
# Après le traitement, le fichier TEST comporte 30 caractères
# (y compris des octets nuls (représentés par un "n"):
1 | 2 | 3 | 4 | 5 | |
Eléments | zéronn | Zéronn | ZEROnn | UNnnnn | deuxnn |
# L'exemple ci-dessus peut aussi s'écrire
Char Y (6) (4,3)
Openo filpath("TXT", "TEST", "")Using [ZZZ]
Putseq 5 Y(0), Y(1,2), Y(2) Using [ZZZ]
Openo Using [ZZZ]
Putseq écrit, dans le dernier fichier ouvert par Openo ou Openio, les éléments contenus dans la liste des variables données en argument de l'instruction, le nombre de ces éléments étant donné par exp_ent.
La clause Using permet de préciser la classe du fichier séquentiel sur lequel on écrit. Il est maintenant possible de traiter plusieurs fichiers séquentiels en même temps.
Lorsqu'il y a des tableaux d'éléments dans la liste, on peut omettre la dernière dimension. Dans le cas de tableaux mono-dimensionnés, on pourra donc indiquer le nom du tableau sans précision d'indice. Les éléments de ces variables sont alors lus par ordre croissant de l'indice de la dimension omise et copiés dans le fichier jusqu'à épuisement du nombre de valeurs à écrire.
Les éléments sont copiés dans le fichier selon la structure interne des variables données en argument. Le tableau suivant donne le format et le nombre d'octets utilisés suivant le type des variables.
TAILLE ET FORMAT DES INFORMATIONS ECRITES PAR PUTSEQ LUES PAR GETSEQ | ||
Type de la variable | Format sur le fichier séquentiel | Octets |
Libelle | Sous la forme d'un octet dont la valeur va de 0 à 255. | 1 |
Char | Sous la forme d'un octet dont la valeur va de 0 à 255. | 1 |
Shortint | Un entier court signé sur 2 octets dans l'ordre partie haute et partie basse. | 2 |
Date définie dans une classe [F] | Le nombre de jours sur 3 octets en commençant par la partie la plus haute. | 3 |
Date définie dans une autre classe | Le nombre de jours sur 4 octets en commençant par la partie la plus haute (comme Integer). | 4 |
Integer | Un entier signé sur 4 octets en commençant par la partie haute. | 4 |
Decimal n.m défini dans une classe [F] | Le nombre au format DCB C-Isam. | (n+m+e+3)/2 m pair : e=0 m impair: e=1 |
Decimal défini dans une autre classe | Le nombre au format DCB C-Isam avec la précision maximale. | 16 |
Ainsi qu'on le remarque dans ce tableau, les variables de type Date ont une taille de 3 octets dans la classe [F] (le but étant de prendre le moins de place possible dans la table), alors que dans les autres classes, elles prennent la place d'un entier long. De même, les nombres décimaux sont automatiquement déclarés avec une taille maximum si on les déclare ailleurs que dans les tables. L'écriture de variables de type Decimal définies dans une classe autre que [F] crée un fichier non portable .
On peut écrire un Blob ( et éventuellement un clob ) vers un fichier séquentiel par l'instruction Putseq. Le fichier séquentiel aura une longueur égale à la longueur du blob.
La fonction adxseek(1) ou adxseek(classe) (pour un fichier ouvert avec une classe) contient après l'écriture la position courante dans le fichier, exprimée en octets. Cette variable vaut -1 dans le cas où aucun fichier n'a été ouvert en écriture.
Les écritures dans un fichier étant bufferisées, elles ne sont effectives qu'après la fermeture de ce fichier par une des instructions Openo ou Openio. Ceci implique qu'avant cette opération, la taille du fichier sur disque peut être inchangée après un Putseq. Seek 0 permet de forcer l'écriture d'un fichier ayant été ouvert par Openio.
L'instruction Putseq permet de créer des fichiers ascii ou des fichiers binaires ayant n'importe quelle structure.