Section courante

A propos

Section administrative du site

INPUT

Entrée
DISK BASIC

Syntaxe

INPUT #nmexp, var[,var...]

Paramètres

Nom Description
nmexp Ce paramètre permet d'indiquer un tampon de fichier d'entrée séquentiel, nmexp=1, 2,..., 15.
var Ce paramètre permet d'indiquer le nom de la variable devant contenir les données du fichier.

Description

Cette instruction entre les données d'un fichier disque. Les données sont saisies séquentiellement. Autrement dit, lorsque le fichier est ouvert pour la première fois, un pointeur est défini sur le début du fichier. Chaque fois que des données sont saisies, le pointeur avance. Pour recommencer la lecture depuis le début du fichier, vous devez fermer le file-buffer et le rouvrir.

INPUT# ne se soucie pas de la manière dont les données ont été placées sur le disque - qu'une seule instruction PRINT# les y ait placées ou qu'elles aient nécessité 10 instructions PRINT# différentes. Ce qui compte pour INPUT#, ce sont les positions des caractères de fin et le marqueur EOF.

Pour INPUT# les données avec succès à partir du disque, vous devez savoir à l'avance quel est le format des données. Voici une description de la façon dont INPUT# interprète les différents caractères qu'il rencontre lors de la lecture des données.

Lors de la saisie de données dans une variable, le BASIC ignore les blancs de tête ; lorsque le premier caractère non blanc est rencontré, BASIC suppose qu'il a rencontré le début de l'élément de données.

L'élément de données se termine lorsqu'un caractère de fin est rencontré ou lorsqu'une condition de fin se produit. Les caractères de fin particuliers varient selon que BASIC entre dans une variable numérique ou de chaîne de caractères.

Lorsque EN (un retour chariot) est précédé de LF (un saut de ligne), EN n'est pas considéré comme un terminateur. Au lieu de cela, il devient une partie de l'élément de données (variable de chaîne de caractères) ou est simplement ignoré (variable numérique). (Pour saisir le caractère LF à partir du clavier, appuyez sur la flèche vers le bas (). Pour saisir le caractère EN, appuyez sur ENTER.) L'exception s'applique à tous les cas notés ci-dessous où EN est considéré comme un terminateur.

Entrée numérique

Supposons que l'image de données sur le disque est :

 1.234 -33  27 EN

EN désigne un caractère de retour chariot (code ASCII décimal 13).

Puis l'instruction suivante :

INPUT #1,A,B,C

ou la séquence d'instructions suivantes :

INPUT #1,A:INPUT #1,B:INPUT #1,C

attribuera les valeurs comme suit :

A=1.2345
B=-33
C=27

Cela fonctionne car les blancs et EN servent de terminateurs pour l'entrée des variables numériques. Le blanc avant 1,2345 est un «blanc de début», il est donc ignoré. Le blanc après 1,2345 est un terminateur ; par conséquent, BASIC commence à entrer la deuxième variable au caractère «-», entre le nombre -33 et prend les deux blancs suivants comme terminateurs. La troisième entrée commence au 2 et se termine au 7.

Entrée de chaîne de caractères

Lors de la lecture de données dans une variable de chaîne de caractères, INPUT ignore tous les blancs de début ; le premier caractère non blanc est considéré comme le début de l'élément de données.

Si le premier caractère est un guillemet double ("), alors INPUT évaluera les données comme une chaîne entre guillemets : il lira tous les caractères suivants jusqu'au prochain guillemet double. Les virgules, les espaces et les caractères EN - seront être inclus dans la chaîne de caractères. Les guillemets eux-mêmes ne font pas partie de la chaîne de caractères.

Par exemple, si les données sur disque sont :

PECOS, TEXAS"BON MELONS"

Alors l'instruction suivante :

INPUT #1,A$,B$,C$

attribuerait des valeurs comme suit :

A$=PECOS
B$= TEXAS"BON MELONS"
C$=Chaîne de caractères nulle

Si une virgule est insérée dans l'image de données avant le premier guillemet double, C$ obtiendra la valeur, BON MELONS.

Ce sont des exemples très simples juste pour vous donner une idée de la façon dont INPUT fonctionne. Cependant, il existe de nombreuses autres façons d'entrer des données - différents terminateurs, différents types de variables cibles,...

Plutôt que d'adopter une approche de fusil de chasse et d'essayer de tous les couvrir, nous donnerons une description générale du fonctionnement de l'entrée et des caractères et conditions de terminaison, puis fournirons plusieurs exemples.

Lorsque BASIC rencontre un caractère de terminaison, il analyse en avant pour voir combien de caractères de terminaison supplémentaires il peut inclure avec le premier caractère de terminaison. Cela garantit que BASIC commencera à rechercher l'élément de données suivant au bon endroit.

La liste ci-dessous définit les différents ensembles de terminaison que INPUT# recherchera. Il essaiera toujours de prendre le plus grand ensemble possible.

Ensembles de terminaisons d'entrée numérique :

Ensembles de terminateurs de chaîne de caractères entre guillemets :

Ensembles de terminaisons de chaîne de caractères sans guillemets :

Voici un organigramme décrivant comment INPUT# affecte des données à une variable :

Le tableau suivant montre comment différentes images de données seront lues par l'instruction :

INPUT#1,A,B,C

Voici quelques exemples de résultats :

Numéro d'exemple Image sur le disque Valeur assigné
1  123.45  EN LF 8.2E4  7000 EN A=123.45
B=82000
C=7000
2    3 LF EN 4 EN 5 EN A12 EOF A=34
B=5
C=0
3 1,,2,3,4 EN A=1
B=0
C=2
4 1,3,fin du fichier A=1
B=2
C=0 erreur de fin de fichier

Dans l'exemple 2 ci-dessus, pourquoi la variable C prend-elle la valeur 0 ? Lorsque l'entrée atteint la fin du fichier, elle termine la dernière donnée, contenant alors "A12". Ceci est évalué par une routine similaire à la fonction VAL du BASIC - renvoyant un zéro car le premier caractère de "A12" n'est pas numérique.

Dans l'exemple 3, lorsque INPUT# cherche le deuxième élément de données, il rencontre immédiatement un terminateur (la virgule) ; donc la variable B prend la valeur zéro.

Le tableau suivant montre comment diverses images de données sur disque seront lues par l'instruction :

INPUT#1,A$,B$
Numéro d'exemple Image sur le disque Valeur assigné
1    "TREMBLAY,J."TREMBLAY,M.N. eof A$=TREMBLAY,J.
B$=TREMBLAY,M.N.
2    TREMBLAY,J.   TREMBLAY,M.N. EN A$=TREMBLAY,J.
B$=J
3 LE MOT "QUI",12345.789 EN A$=LE MOT "QUI"
B$=12345.789
4 OCTET LF UNITE DE MEMOIRE eof A$=OCTET LF EN UNITE DE MEMOIRE
B$=nulle (erreur eof)

Dans l'exemple 3, le premier élément de données est une chaîne de caractères sans guillemets, donc les guillemets doubles ne sont pas des terminateurs et font partie de A$.

Dans l'exemple 4, le EN est précédé d'un LF, il ne termine donc pas la première chaîne de caractères ; LF et EN sont tous deux inclus dans A$.

Note technique : La discussion ci-dessus ignore le rôle du tampon d'entrée dans le processus d'entrée séquentielle. En fait, DISK BASIC lit toujours des enregistrements de données de 256 octets dans le tampon, puis trie ce qui se trouve dans le tampon pour "satisfaire" la liste de variables INPUT #. C'est pourquoi :

100 INPUT#1,A%
200 INPUT#1,B%

ne nécessitent pas nécessairement deux accès disque. L'enregistrement de 256 octets dans la mémoire tampon peut contenir suffisamment de données pour A%, B% et plus.



Dernière mise à jour : Vendredi, le 3 Mars 2023