L4G >  Seek  

Afficher tout Masquer tout

Seek permet de déplacer le pointeur de lecture d'un fichier ouvert par Openi ou Openio

Seek permet également (avec une valeur nulle) de forcer l'écriture sur le fichier (flush).

 

Syntaxe

Seek First + exp_e   [ Using classe ]
Seek Last - exp_e   [ Using classe ]
Seek Curr + exp_e   [ Using classe ]
Seek Curr - exp_e   [ Using classe ]
Seek exp_e [ Using classe ]

 

Paramètres

 

Description

Restrictions

exp_e

Expression entière contenant la valeur du décalage à faire

Aucune

classe

Abréviation désignant le fichier ouvert.

Aucune.

 

Exemples

   # Ouverture d'un fichier, et lecture de 10 octets tous les 20 octets
    Char BUFFERS(10)(MAXLIGNES)
    Openi "FICHIER"
    fstat = 0 : I = 0
    Repeat
       Getseq 1, BUFFERS(I) : I += 1
       Seek 10
    Until fstat <> 0 or I >= MAXLIGNES
    Openi
   # Réécriture des 50 derniers octets d'un fichier
    Libelle BUFFER(50)
    Openio "FICHIER"
    Seek Last - 50
    Getseq 50, BUFFER
   # .. Modification de BUFFER
    Seek Last - 50
    Putseq 50, BUFFER
    Openio
   # Si 2 fichiers sont ouverts :
   # Réécriture des 50 derniers octets du 2ème fichier
    Libelle BUFFER(50)
    Openi "FICHIER1" Using [YYY]
    Openi "FICHIER2" Using [ZZZ]
    Seek Last - 50 Using [ZZZ]
    Getseq 50, BUFFER Using [ZZZ]
    Openi Using [ZZZ]
    Openi Using [YYY]
   # Ecriture de 1 octet avec "flush"
    Putseq 1, UN_OCTET
    Seek 0

 

Description

Seek permet de déplacer le pointeur de lecture ou de lecture / écriture dans le cas d'un fichier ouvert par Openi ou Openio. On peut se déplacer :

  • par rapport au début du fichier (syntaxe "SeekFirst + exp_e"),
  • par rapport à la fin du fichier (syntaxe "SeekLast - exp_e"),
  • par rapport à la position courante (syntaxe "Seek Curr + exp_e").

Dans la syntaxe "Seek exp_e", le déplacement se fait par rapport à la position courante.

Sur certains fichiers (comme des pipes, ou certains devices), le Seek est impossible. Dans ce cas, une erreur ERSEEK est renvoyée.

La syntaxe "Seek 0", ou Seek (qui équivaut à un non-déplacement du pointeur) provoque un vidage des tampons d'écriture (flush), car les fonctions d'écriture sont toutes bufferisées. Cette syntaxe est donc utilisable sur tous types de fichiers; si aucun fichier n'a été ouvert en écriture, elle ne provoque pas d'erreur mais ne fait rien.

 

Remarques

La fonction adxseek(0) ou adxseek(classe) (pour un fichier ouvert avec une classe) permet à tout moment de connaître la position courante (en nombre d'octets) par rapport au début du fichier. Cette variable vaut -1 si aucun fichier séquentiel n'a été ouvert en lecture, mais elle est mise à jour même si on ne peut pas faire de Seek sur le fichier (dans ce cas, sa valeur initiale est 0 et elle est incrémentée du nombre d'octets lus ou écrits).

 

Erreurs associées

Erreur

Description

ERMODE (10)

L'argument n'est pas de type numérique.

ERDOM (50)

L'argument n'est pas de type entier.

ERGFIC (24)

Aucun fichier ouvert en Openi ou Openio.

ERSEEK (57)

Seek impossible sur ce type de fichier.

 

Mots-clés associés

OPENI - OPENIO - ADXSEEK - RDSEQ - WRSEQ - GETSEQ - PUTSEQ