L4G >  Putseq  

Afficher tout Masquer tout

Putseq permet d'écrire des données à partir de variables sur un fichier binaire ouvert par Openo ou Openio.

 

Syntaxe

   Putseq exp_ent, liste_varia [ Using classe ]

 

Paramètres

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.

 

Exemples

# 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 :

spacer.gif (822 octets)

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"):

spacer.gif (822 octets)

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]

 

Description

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.

 

Remarques

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.

 

Erreurs associées

Erreur

Description

ERMODE (10)

exp_ent n'est pas de type entier.

ERDIM (55)

Variable ayant plus d'une dimension.

ERGFIC (24)

Erreur en gestion de fichier séquentiel.

ERMDISK (44)

Plus de place sur le disque.

ERULIM (65)

Problème de ulimit (le fichier est trop gros).

 

Mots-clés associés

GETSEQ - RDSEQ - WRSEQ - ADXSEEK - SEEK - OPENO - OPENIO