• No results found

Het werken met bestanden (files)

In document HANDBOEK VOOR DE COMMODORE 64 (pagina 99-102)

Ervaren programmeurs zu"en verfijndere programma's willen schrijven, waarin grote hoeveelheden gegevens (DATA) verwerkt worden. Deze gegevens kunnen opgeslagen worden in een gegevensbestand (datafile) op cassette. De comman­

do's om gegevensbestanden te kunnen lezen en schrijven worden hieronder be·

sproken.

Gegevensbestanden kunnen i ngelezen worden van en weggeschreven worden naar de 1530/1531 . Deze kunnen NIET ingelezen worden als een programma, ze kunnen slechts ingelezen worden DOOR een programma. Om met de 1530/1531 te communiceren moet de OPEN instructie gebruikt worden.

OPEN A,B,C,"NAAM"

Dit commando OPENt een logical file waarbij NAAM het bestand identificeert en A een referentienummer van de computer is (LOGICAL FILE), dat tussen 1 en 255 mag liggen. Wanneer uw programma meerdere bestanden tegelijk ge­

bruikt, moet ieder bestand een eigen logical file nummer hebben.

B gelijk moet zijn aan 1 voor de 1530/1531 . Dit is uw apparaatnummer ( DEVICE ADDRESS).

C specificeert of er i ngelezen of weggeschreven moet worden van het bestand volgens:

C = 0: lees van cassetteband;

C = 1 : schrijf naar cassetteband met een END OF FILE markering wanneer het bestand afgesloten wordt;

C = 2: schrijf naar cassettebestand met een END OF TAPE markering wan­

neer het bestand afgesloten wordt.

Voorbeeld:

OPEN 5, 1 , 1 ,"TEST"

zal via het logical file 5 een schrijfbestand openen dat "TEST" heet.

Wanneer aan C een waarde 2 wordt toegekend, wordt een EN D OF TAPE marke­

ring geschreven aan het einde van het bestand. Wanneer de computer dan opge-91

dragen wordt een bestand te lezen dat zich na "TEST" zou bevinden, zal de com­

puter antwoorden met FILE NOT FOUND ERROR, en stoppen. Dit komt omdat het bestand TEST aan de computer vertelt dat de band beeindigd is, ongeacht of dit inderdaad ook het geval is, zodat de computer denkt dat er geen i nforma­

tie op de band voigt.

C en NAAM hoeven niet gespecificeerd te worden door de gebruiker. Wanneer NAAM ongebrui kt blijft, wordt het bestand geopend zonder naam. Wanneer een lees-instructie gegeven wordt aan de computer, leest deze het eerste bestand van de band. Wanneer C niet gespecificeerd is, wordt het bestand geopend voor inlezen.

INPUT 1f:. A, D

zal gegevens van cassette halen en ze in de computer verwerken.

A is het logical file nummer dat gebruikt is in een voorgaande OPEl\! instructie die het inlezen van cassette specificeerde.

D is de BASIC variabele waaraan de gegevens van band zullen worden doorge­

geven. Wanneer woorden ingelezen worden, dan moet D D$ zijn. Ais D$ niet gebruikt wordt in dit geval, zal de volgende foutmelding worden gegeven:

FILE DATA ERROR.

Voorbeeld:

I N PUT # 5, A$

zal stringdata (woorden) van logical file 5 i nlezen. Gegevens worden van cassette ingelezen en toegekend aan BASIC variabele A$.

GET 1f:.

is een alternatief voor I N PUT # . GET # neemt 1 karakter per keer op. GET # leest komma's, dubbele punten enz., terwijl IN PUT # dat niet kan.

PRINT 1f:. A,D

zal gegevens op cassette wegschrijven.

A is het logical file nummer dat in een voorgaande OPEN instructie gebruikt is, waarin het wegschrijven naar band gespecificeerd werd.

D is de BASIC variabele van waaruit gegevens weggeschreven moeten worden.

Ais de gegevens uit woorden bestaan moet D$ gebruikt worden.

Voorbeeld:

PRI NT # 5,A$

zal de string A$ via logical file 5 op band wegschrijven, gesteld dat het bestand voor wegschrijven geopend is. Wanneer het bestand niet op de juiste wijze ge­

opend is, zal het beeldscherm NOT OUTPUT FILE vermelden.

CLOSE A

zal het logical file toegekend aan A sluiten, waarbij A het logical file nummer zelf is.

Waarschuwing:

Wanneer dit commando niet gebruikt wordt nadat aile gegevens zijn wegge­

schreven, kan het voorkomen dat sommige gegevens niet op cassette wegge­

schreven staan.

92

Hieronder volgen enkele voorbeeldprogramma's waarin aile bovenstaande com­

mando's gebruikt worden. U zult merken dat van tijd tot tijd het beeldscherm uit­

gaat, als de cassetterecorder gaat lopen. Dit is normaal. De interne cassette buffer wordt op dat moment overgebracht naar de recorder.

Voorbeeldprogramma 1 -wegschrijven van gegevens

1 0 OPEN 1 , 1 , 1 ,"TEST FI LE" Open bestand 1 voor wegschrijven met naam TEST FILE.

20 FOR X = 1 TO 1 00 30 PRINT # 1 ,X

Voer alles tussen FOR en N EXT 1 0 maal uit.

Schrijf de waarde die variabele X heeft via logical file 1, weg naar band.

40 NEXT

50 CLOSE1 Ga terug naar regel 20 voor 1 0 keren.

Sluit het bestand af.

Voorbeeldprogramma 2 -inlezen van gegevens met gebruik van INPUT "

1 0 OPEN 1 , 1 ,0,"TEST FI LE" Open het bestand voor inlezen uit TEST FILE.

20 I N PUT # 1 ,D$:OS = ST Lees een string in van de band als D$.

30 PRINT D$ Druk de waarde van D$ af op het beeldscherm.

40 IF OS = 0 GOTO 20 Controleer de status van de cassette. Als deze OK is, ga terug naar regel 20.

50 CLOSE1 Sluit het bestand af.

Voorbeeldprogramma 3 -inlezen van gegevens met behulp van GET "

1 0 OPEN 1 , 1 ,0"TEST FI LE" Open het bestand voor i nlezen uit TEST FILE.

20 GET # 1 , D$ Haal 1 karakter van de band naar D$.

25 OS = ST Stel de EOF variabele veilig i n OS (PRINT bern­

vloedt i mmers ST ook).

30 PRINT D$ Druk het karakter in variabele D$ af op het scherm.

40 IF OS = 0 GOTO 20 Controleer de status van de cassette. Als deze OK is, ga terug naar regel 20.

50 CLOSE1 Sluit het bestand af.

De variabele ST is een gereserveerde variabele, die gebruikt wordt om o.a. het einde van een databestand te signaleren. De status, die normaal gesproken de waarde 0 heeft, verandert op het moment dat het laatste gegeven door middel van de I N PUT # of GET # is i ngelezen. Bij einde bestand (END OF FILE) wordt de waarde van ST = 64.

In de Programmers Reference Manual wordt dieper op de mogel ijkheden van de variabele ST i ngegaan.

93

In document HANDBOEK VOOR DE COMMODORE 64 (pagina 99-102)