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 |
PECOS, TEXAS"BON MELONS" |
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 :
- Fin de fichier rencontrée
- 255e caractère de données rencontré
- , (virgule)
- EN
- EN LF
- [ ...] [ EN]
- [ ...] [ EN LF]
Ensembles de terminateurs de chaîne de caractères entre guillemets :
- Fin de fichier rencontrée
- 255e caractère de données rencontré
- " (double citation)
- " [ ...][,]
- " [ ...][ EN]
- " [ ...][ EN LF]
Ensembles de terminaisons de chaîne de caractères sans guillemets :
- Fin de fichier rencontrée
- 255e caractère de données rencontré
- ,
- EN [LF]
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.