Enregistrement

GW-BASIC (PC-BASIC)

Initiation au langage Basic

Accéder à un fichier séquentiel

Votre première et principale tâche est de stocker vos informations en permanence sur le disque.

Prêt à s'organiser? Nous continuerons avec votre collection de livres. Voici une petite liste de livres :

1. TRAVAIL
2. LE BERCEAU DU CHAT
3. PETIT C'EST BEAU
4. INTRODUCTION A GW-BASIC

Si vous avez lu votre introduction, vous savez comment sauvegarder des programmes de base sur le disque. Pour enregistrer des informations, vous avez besoin d'un programme qui suit ces étapes :

ÉTAPES POUR ENREGISTRER DES INFORMATIONS SUR LE DISQUE

1. Ouvrez la communication sur le disque afin que vous puissiez envoyer l'information vers un fichier
2. Enregistrer toutes les informations dans le fichier.
3. Fermez la communication avec le fichier sur le disque.

Lancez le programme avec cette ligne :

10 OPEN "O",1,"Livres.txt"

Cela ouvre le fichier 1 "Livres" pour que vous puissiez "sortir" ("O") les informations en mode de sortie séquentiel.

Quelles que soient les informations que vous produisez, l'ordinateur les stocke sur le disque dans un "fichier" nommé LIVRES. Sortez maintenant les informations.

Taper:

15 CLS: PRINT "ENTREZ VOS LIVRES - TAPEZ <XX> UNE FOIS TERMINÉ"
10 OPEN "O",1,"Livres.txt"
20 INPUT "TITRE"; T$
30 PRINT #1, T$
40 GOTO 15

La ligne 30 "enregistre" (sort) vos titres de livres --- pas sur l'écran, mais sur le disque.

Fermez ensuite les communications. Taper:

25 IF T$ = "XX" OR T$ = "xx" THEN 50
50 CLOSE #1

L'ordinateur ferme alors la communication avec le fichier.

Ajoutez trois lignes supplémentaires au programme :

Exécutez ensuite le programme. L'ordinateur ouvre un "fichier" sur le disque et le nomme LIVRES.
Le programme demande alors des titres. Taper:

TITRE? TRAVAIL

TITRE? LE BERCEAU DU CHAT

TITRE? PETIT C'EST BEAU

TITRE? INTRODUCTION A GW-BASIC

Chaque fois que vous saisissez un titre, l'ordinateur l'imprime dans un emplacement spécial de la mémoire réservé au disque. Lorsque vous avez terminé, l'ordinateur imprime tous les titres dans le fichiers (Ligne 30) puis ferme la communication avec le fichier (Ligne 50).

Vos titres de livres sont maintenant tous enregistrés sur disque dans un fichier nommé Livres.txt. Pour les relire en mémoire, suivez à peu près les mêmes étapes.

ÉTAPES POUR LA SAISIE D'INFORMATIONS À PARTIR DU FICHIER

1. Ouvrez un fichier afin de pouvoir saisir des informations à partir d'un fichier.
2. Vérifiez si vous êtes à la fin du fichier.
3. Entrez les informations du fichier du disque.
4. Répétez les étapes 2 et 3 jusqu'à ce que vous atteignez la fin du fichier.

Tapez:

80 OPEN "I", #1, "Livres.txt"
90 INPUT #1,B$
100 PRINT B$

La ligne 90 entre le premier titre de livre (B$ du fichier Livres stocké sur bande.
(Le nom de la variable que vous choisissez ne fait aucune différence.) La ligne 100 affiche ce titre sur votre écran.

Pour vérifier la fin du fichier et fermer le fichier, ajoutez ces lignes :

85 IF EOF(1) THEN 120
110 GOTO 85
120 CLOSE #1

La ligne 85 indique si vous êtes à la fin de ce fichier (dans ce CAS, le fichier Livres). aller à 120 et fermer le fichier.

Notez que EOF(1) vient avant la ligne INPUT #1. Si c'est après INPUT #1, vous obtiendrez une erreur IE error après la fin du fichier.

Listez cette dernière partie du programme en tapant list. Ça devrait ressembler à ça:

80 OPEN "I", #1, "Livres.txt"
85 IF EOF(1) THEN 120
90 INPUT #1,B$
100 PRINT B$
110 GOTO 85
120 CLOSE #1

Exécutez maintenant cette partie du programme.

L'ordinateur entre les éléments du disque. Une fois terminé, il affiche les quatre éléments sur votre écran.

Un catalogue électronique de cartes

Supposons que vous deviez modifier le programme afin qu'il puisse également stocker les auteurs et les sujets des livres :

Titre
TRAVAIL
LE BERCEAU DU CHAT
PETIT C'EST BEAU
INTRODUCTION A GW-BASIC
Auteur
Studs Terkel
Kurt Vonnegut
E. F. Shumacher
Michel Gaudet
Sujet
Sociologie
Fiction
Économie
Informatique

Commencez par changer la partie "sortie" du programme (la première moitié). Tapez ces lignes :

15 CLS: PRINT "ENTREZ VOS LIVRES - TAPEZ <XX> UNE FOIS TERMINÉ"
10 OPEN "O",1,"Livres2.txt"
20 INPUT "TITRE"; T$
25 IF T$ = "XX" OR T$ = "xx" THEN 50
26 INPUT "AUTEUR"; A$
27 INPUT "SUJET"; S$
30 PRINT #1, T$; "," A$ "," ; S$ 'Les variables dans le fichier doivent être séparées par des virgules
40 GOTO 15
50 CLOSE #1

Modifiez ensuite la partie "INPUT" du programme. Tapez ces lignes :

80 OPEN "I", #1, "Livres2.txt"
85 IF EOF(1) THEN 120
90 INPUT #1,T$,A$,S$
100 PRINT T$,A$,S$
110 GOTO 85
120 CLOSE #1

Profitez maintenant de cette organisation.

Par exemple, demandez au programme d'afficher une liste de livres sur un sujet donné. Ajoutez ces lignes :

130 CLS
140 INPUT "QUEL SUJET"; C$
150 CLS: PRINT C$, "Livres" : PRINT
160 OPEN "I", #1, "Livres2.txt"
170 IF EOF(1) THEN 210
180 INPUT #1,T$,A$,S$
190 IF S$ = C$ THEN PRINT "Titre",T$,"Auteur", A$
200 GOTO 170
210 CLOSE #1

Programme faites-le vous même

Supposons que vous ayez ces informations:

No.
101
102
103
104
105
Date
5-13
5-13
5-14
5-17
5-19
Payable à
Safeway
Amoco
Joe's Cafe
American Airline
Holiday Inn
Compte
Nourriture
Voiture
Nourriture
Vacances
Vacances
Montant $
52.60
32.70
10.32
97.50
72.30

Écrivez un programme qui envoie tous les chèques sur le disque. Ensuite, faites-lui entrer le fichier à partir du disque afin que vous puissiez taper un compte, comme la nourriture, et l'ordinateur vous indiquera le montant total que vous avez dépensé en nourriture.

DEPENSES.BAS

Fichiers à accès aléatoire

Les informations contenues dans les fichiers à accès aléatoire sont stockées et accessibles dans des unités numérotées distinctes appelées enregistrements. Étant donné que les informations sont appelées par numéro, les données peuvent être appelées à partir de n'importe quel emplacement du disque ; le programme n'a pas besoin de lire l'intégralité du disque, comme lors de la recherche de fichiers séquentiels, pour localiser les données.

GW-BASIC prend en charge les gros fichiers aléatoires. Le nombre maximal d'enregistrements logiques est 232 -1.

Les instructions et fonctions suivantes sont utilisées avec des fichiers aléatoires :

CLOSE FIELD MKI$
CVD LOC MKS$
CVI LOCK OPEN
CVS LOF PUT
EOF LSET/RSET UNLOCK
ET MKD$

Création d'un fichier à accès aléatoire

Les étapes de programme suivantes sont nécessaires pour créer un fichier de données aléatoires :

1. Ouvrez le fichier pour le mode d'accès aléatoire (R). L'exemple suivant spécifie une longueur d'enregistrement de 32 octets. Si la longueur d'enregistrement est omise, la valeur par défaut est de 128 octets.

OPEN "R", #1, "filename", 32

2. Utilisez l'instruction FIELD pour allouer de l'espace dans le tampon aléatoire aux variables qui seront écrites dans le fichier aléatoire :

FIELD#1, 20 AS N$, 4 AS A$, 8 AS P$

Dans cet exemple, les 20 premières positions (octets) dans le tampon de fichier aléatoire sont allouées à la variable de chaîne N$. Les 4 positions suivantes sont attribuées à A$ ; les 8 suivants à P$.

3. Utilisez LSET ou RSET pour déplacer les données dans les champs aléatoires du tampon dans un format justifié à gauche ou à droite (L=left SET;R=right SET).

Les valeurs numériques doivent être transformées en chaînes lorsqu'elles sont placées dans le tampon. MKI$ convertit une valeur entière en une chaîne ; MKS$ convertit une valeur simple précision et MKD$ convertit une valeur double précision.

LSET N$=X$
LSET A$=MKS$(AMT)
LSET P$=TEL$

4. Écrivez les données du tampon sur le disque à l'aide de l'instruction PUT :

PUT #1, CODE%

Le programme de l'exemple 1 prend les informations saisies en entrée au niveau du terminal et les écrit dans un fichier de données à accès aléatoire. Chaque fois que l'instruction PUT est exécutée, un enregistrement est écrit dans le fichier. Dans l'exemple, l'entrée CODE% à 2 chiffres à la ligne 30 devient le numéro d'enregistrement.

Noter

N'utilisez pas de variable de chaîne avec champ dans une instruction INPUT ou LET. Ainsi, le pointeur de cette variable pointe dans l'espace chaîne au lieu du tampon de fichier aléatoire.

Exemple 1

10 OPEN "R", #1, "INFOFILE", 32
20 FIELD#1, 20 AS N$, 4 AS A$, 8 AS P$
30 INPUT "2-DIGIT CODE"; CODE%
40 INPUT "NAME"; X$
50 INPUT "AMOUNT"; AMT
60 INPUT "PHONE"; TEL$: PRINT
70 LSET N$=X$
80 LSET A$=MKS$(AMT)
90 LSET P$=TEL$
100 PUT #1, CODE%
110 GOTO 30

Accéder à un fichier à accès aléatoire

Les étapes de programme suivantes sont nécessaires pour accéder à un fichier aléatoire :

1. Ouvrez le fichier en mode R :

OPEN "R", #1, "filename", 32

2. Utilisez l'instruction FIELD pour allouer de l'espace dans le tampon aléatoire aux variables qui seront lues à partir du fichier :

FIELD, #1, 20 AS N$, 4 AS A$, 8 AS P$

Dans cet exemple, les 20 premières positions (octets) dans le tampon de fichier aléatoire sont allouées à la variable de chaîne N$. Les 4 positions suivantes sont attribuées à A$ ; les 8 suivants à P$.

Noter

Dans un programme qui exécute à la fois INPUT et OUTPUT sur le même fichier aléatoire, vous pouvez souvent utiliser une seule instruction OPEN et une seule instruction FIELD.

3. Utilisez l'instruction GET pour déplacer l'enregistrement souhaité dans la mémoire tampon aléatoire.

GET #1, CODE%

Les données dans la mémoire tampon sont maintenant accessibles par le programme.

4. Reconvertissez les valeurs numériques en nombres à l'aide des fonctions de conversion : CVI pour les nombres entiers, CVS pour les valeurs à simple précision et CVD pour les valeurs à double précision.

PRINT N$
PRINT CVS(A$)
. . .

Le programme de l'exemple 2 accède au fichier aléatoire, INFOFILE, qui a été créé dans l'exemple 1. En entrant le code à 3 chiffres, les informations associées à ce code sont lues à partir du fichier et affichées.

Exemple 2

10 OPEN "R",#1,"INFOFILE",32
20 FIELD #1, 20 AS N$, 4 AS A$, 8 AS P$
30 INPUT "2-DIGIT CODE";CODE%
40 GET #1, CODE%
50 PRINT N$
60 PRINT USING "$$###.##";CVS(A$)
70 PRINT P$:PRINT
80 GOTO 30

Avec des fichiers aléatoires, la fonction LOC renvoie le numéro d'enregistrement actuel. Le numéro d'enregistrement en cours est le dernier numéro d'enregistrement utilisé dans une instruction GET ou PUT.

Par exemple, la ligne suivante termine l'exécution du programme si le numéro d'enregistrement courant dans le fichier n°1 est supérieur à 99 :

IF LOC(1)>99 THEN END

L'exemple 3 est un programme d'inventaire qui illustre l'accès aléatoire aux fichiers. Dans ce programme, le numéro d'enregistrement est utilisé comme numéro de pièce et il est supposé que l'inventaire ne contiendra pas plus de 100 numéros de pièce différents.

Les lignes 900-960 initialisent le fichier de données en écrivant CHR$(255) comme premier caractère de chaque enregistrement. Ceci est utilisé plus tard (ligne 270 et ligne 500) pour déterminer si une entrée existe déjà pour ce numéro de pièce.

Les lignes 130 à 220 affichent les différentes fonctions d'inventaire exécutées par le programme. Lorsque vous tapez le numéro de fonction souhaité, la ligne 230 se branche sur le sous-programme approprié.

Exemple 3

120 OPEN"R",#1,"INVEN.DAT",39
125 FIELD#1,1 AS F$,30 AS D$, 2 AS Q$,2 AS R$,4 AS P$
130 PRINT:PRINT "FUNCTIONS:":PRINT
135 PRINT 1,"INITIALIZE FILE"
140 PRINT 2,"CREATE A NEW ENTRY"
150 PRINT 3,"DISPLAY INVENTORY FOR ONE PART"
160 PRINT 4,"ADD TO STOCK"
170 PRINT 5,"SUBTRACT FROM STOCK"
180 PRINT 6,"DISPLAY ALL ITEMS BELOW REORDER LEVEL"
220 PRINT:PRINT:INPUT"FUNCTION";FUNCTION
225 IF (FUNCTION<1)OR(FUNCTION>6) THEN PRINT "BAD FUNCTION NUMBER":GOTO 130
230 ON FUNCTION GOSUB 900,250,390,480,560,680
240 GOTO 220
250 REM BUILD NEW ENTRY
260 GOSUB 840
270 IF ASC(F$) < > 255 THEN INPUT"OVERWRITE";A$: IF A$ < > "Y" THEN RETURN
280 LSET F$=CHR$(0)
290 INPUT "DESCRIPTION";DESC$
300 LSET D$=DESC$
310 INPUT "QUANTITY IN STOCK";Q%
320 LSET Q$=MKI$(Q%)
330 INPUT "REORDER LEVEL";R%
340 LSET R$=MKI$(R%)
350 INPUT "UNIT PRICE";P
360 LSET P$=MKS$(P)
370 PUT#1,PART%
380 RETURN
390 REM DISPLAY ENTRY
400 GOSUB 840
410 IF ASC(F$)=255 THEN PRINT "NULL ENTRY":RETURN
420 PRINT USING "PART NUMBER ###";PART%
430 PRINT D$
440 PRINT USING "QUANTITY ON HAND #####";CVI(Q$)
450 PRINT USING "REORDER LEVEL #####";CVI(R$)
460 PRINT USING "UNIT PRICE $$##.##";CVS(P$)
470 RETURN
480 REM ADD TO STOCK
490 GOSUB 840
500 IF ASC(F$)=255 THEN PRINT "NULL ENTRY":RETURN
510 PRINT D$:INPUT "QUANTITY TO ADD";A%
520 Q%=CVI(Q$)+A%
530 LSET Q$=MKI$(Q%)
540 PUT#1,PART%
550 RETURN
560 REM REMOVE FROM STOCK
570 GOSUB 840
580 IF ASC(F$)=255 THEN PRINT "NULL ENTRY":RETURN
590 PRINT D$
600 INPUT "QUANTITY TO SUBTRACT";S%
610 Q%=CVI(Q$)
620 IF (Q%-S%)<0 THEN PRINT "ONLY";Q%;"IN STOCK" :GOTO 600
630 Q%=Q%-S%
640 IF Q%= < CVI(R$) THEN PRINT "QUANTITY NOW";Q%;"REORDER LEVEL";CVI(R$)
650 LSET Q$=MKI$(Q%)
660 PUT#1,PART%
670 RETURN
680 REM DISPLAY ITEMS BELOW REORDER LEVEL4
690 FOR I=1 TO 100
710 GET#1,I
720 IF CVI(Q$)<CVI(R$) THEN PRINT D$;"QUANTITY";CVI(Q$) TAB(50) "REORDER LEVEL";CVI(R$)
730 NEXT I
740 RETURN
840 INPUT "PART NUMBER";PART%
850 IF(PART% < 1)OR(PART% > 100) THEN PRINT "BAD PART NUMBER":GOTO 840 ELSE GET#1,PART%:RETURN
890 END
900 REM INITIALIZE FILE
910 INPUT "ARE YOU SURE";B$:IF B$ < > "Y" THEN RETURN
920 LSET F$=CHR$(255)
930 FOR I=1 TO 100
940 PUT#1,I
950 NEXT I
960 RETURN

 

 

 

 

 

 

 

Recherche personnalisée