SequentiŽle bestanden

SequentiŽle bestanden worden geopend met het OPEN statement.
Wanneer zij niet meer nodig zijn, of wanneer het programma beŽindigt,
moeten zij met het CLOSE statement worden gesloten.

SequentiŽle bestanden staan toe dat gegevens uit een bestand worden gelezen of
naar een bestand worden geschreven van het begin tot het eind.
Het is niet mogelijk om gegevens in te lezen die in het midden van het bestand beginnen,
noch is het mogelijk om gegevens ergens in het midden aan het bestand toe te voegen
bij het gebruik van de sequentiŽle lees/schrijf methode.

Data kan uit een bestand gelezen worden indien die voor INPUT wordt geopend.
Het inlezen begint aan het begin van het bestand. Elke verdere input statement leest het volgende stuk data in het bestand.

Data wordt naar een bestand geschreven dat voor OUTPUT is geopend
met een print statement en het schrijven begint aan het begin van het bestand,
en elke volgende print statement schrijft verder gegevens aan het eind van het open bestand.

Wanneer een bestand voor APPEND wordt geopend,
schrijft elke print statement gegevens aan het eind van het geopende bestand.

SequentiŽle lees/schrijf methode

input

De bestanden die voor INPUT worden geopend kunnen worden gelezen. Er kan niet naar ze worden geschreven.
Een bestand dat voor INPUT wordt geopend moet reeds op schijf bestaan, of het programma zal met een fout stoppen.
Zie het Testen voor het bestaan van een bestand.

Het INPUT statement leest een stuk data in tot de volgende komma of de teken voor een volgende regel.
Het LINEINPUT statement leest een stuk data in dat ook komma's kan bevatten (die zijn nu geen afbakeningen),
en houdt op gegevens in te lezen tot het volgende nieuwe regel teken.
Het Input$ statement leest gegevens van een gespecificeerde lengte uit een bestand.
Het Inputto$ statement leest gegevens tot een gespecificeerde afbakening.

Hier is een illustratie van de verschillen tussen de diverse vormen van de het INPUT statement.

Voorbeeld programma's:

' creŽer een test bestand <
> open "test.txt" for output as #1
print #1, "123 Sesame Street, New York, NY"
close #1

'INPUT
open "test.txt" for input as #1
INPUT #1, txt$
print "INPUT item is: ";txt$
close #1

'LINE INPUT
open "test.txt" for input as #1
LINE INPUT #1, txt$
print "LINE INPUT item is: ";txt$
close #1

'INPUT$
open "test.txt" for input as #1
txt$ = INPUT$(#1, 10) 'read 10 characters
print "INPUT$ item is: ";txt$
close #1

'INPUTTO$
open "test.txt" for input as #1
txt$ = INPUTTO$(#1, " ") 'use a blank space as delimiter
print "INPUTTO$ item is: ";txt$
close #1

Produces:
INPUT item is: 123 Sesame Street
LINE INPUT item is: 123 Sesame Street, New York, NY
INPUT$ item is: 123 Sesame
INPUTTO$ item is: 123

 

Meervoudige INPUT van gegevens
Hier is een kort programma dat een tekstbestand opent en steeds ťťn regel in leest,
en die regel in de mainwin toont.

filedialog "Open ","*.txt", file$
if file$="" then end
open file$ for input as #1
while eof(#1) = 0
line input #1, text$
print text$
wend
close #1

'print a notice that the end of file is reached:
print:print:print "EOF"

output


We kunnen naar bestanden die voor OUTPUT worden geopend opeenvolgend schrijven.
Als een bestand dat voor OUTPUT wordt geopend niet bestaat, zal het worden gecreŽerd.
Als het bestand reeds op schijf bestaat, zal de vorige inhoud worden overschreven, en daarom verloren gaan.
De zorg zou moeten worden genomen wanneer het openen van dossiers voor OUTPUT
zodat het kritieke gegeven niet toevallig wordt gewist.
Zie het Testen op het Bestaan van het bestand.

Data wordt naar een bestand dat voor OUTPUT geopend is, geschreven met een PRINT statement.
Een regelafbakening of een nieuwe regel wordt automatisch naar het bestand geschreven bij elke PRINT statement.
De nieuwe regel kan worden onderdrukt door de code regel met een puntkomma te beŽindigen.

Voorbeeld programma:

' creŽer een testbestand
open "test.txt" for output as #1
'write some data with line delimiters
print #1, "line one "
print #1, "line two "
'write some data without line delimiters
print #1, "item three ";
print #1, "item four ";

'more data with line delimiters added

print #1, "item five"
print #1, "done"
close #1

'INPUT to see what we wrote
open "test.txt" for input as #1
txt$ = input$(#1, lof(#1))
print "Contents of file: "
print
print txt$
close #1

Contents of file:

line one
line two
item three item four item five
done

append

Bestanden die voor APPEND worden geopend kunnen sequentieel worden bewerkt.
Als een bestand dat voor APPEND wordt geopend niet bestaat, zal het worden gecreŽerd.
Als het bestand reeds op schijf bestaat, zullen alle nieuwe gegevens
die naar het bestand met een PRINT statement worden geschreven
aan het eind van het bestand worden toegevoegd.

Het schrijven van de gegevens naar een bestand dat voor APPEND is geopend werkt
op de zelfde manier als bij een bestand dat voor OUTPUT wordt geopend,
maar in plaats van dat de bestaande data in de file wordt overschreven,
wordt het nieuwe gegeven altijd toegevoegd aan het eind van het bestand.
Als bij een voor OUTPUT geopend bestaand bestand naar het bestand wordt geschreven,
worden de bestaande gegevens van voor het openen overschreden.

Voorbeeld programma:
open "test.txt" for append as #1

'write some data with line delimiters
print #1, "line one "
print #1, "line two "

'write some data without line delimiters

print #1, "item three ";
print #1, "item four ";
'more data with line delimiters added

print #1, "item five"
print #1, "done"
close #1

File Copy


Een bestand kunne we kopiŽren door gebruik te maken van de enkele bestandsbewerkingen.
Het te kopiŽren bestand wordt geopend voor INPUT.
Het bestand dat een kopie moet zijn wordt dan geopend voor OUTPUT.
De inhoud van het oorspronkelijke bestand wordt teruggehaald met een Input$ statement en naar het nieuwe exemplaar (kopie) met een PRINT statement geschreven.
Beide bestanden worden daarna gesloten.

Hier is een voorbeeld:

open "mybytes.bin" for input as #original
open "copybyte.bin" for output as #copy
print #copy, input$(#original, lof(#original));
close #original
close #copy
end