6. Tekstbestanden
Een tekstbestand is een bestand dat uit tekstregels bestaat. Laten we aan de hand van voorbeelden eens kijken naar het aanmaken en gebruiken van dergelijke bestanden.
6.1. Aanmaken en gebruik
Programma |
![]() |
Resultaten |
Opmerkingen
- Op regel 7 wordt een bestandsobject van het type "Scripting.FileSystemObject" aangemaakt via de functie CreateObject("Scripting.FileSystemObject"). Met een dergelijk object is toegang mogelijk tot elk bestand in het systeem, niet alleen tot tekstbestanden.
- Op regel 9 wordt een object "TextStream" aangemaakt. Het aanmaken van dit object gaat gepaard met het aanmaken van het bestand testfile.txt. Dit bestand wordt niet aangeduid met een absolute naam zoals c:\dir1\dir2\....\testfile.txt, maar met een relatieve naam: testfile.txt. Het wordt dan aangemaakt in de map van waaruit het commando voor het uitvoeren van het bestand wordt gestart.
- Het bestandssysteem van Windows kent geen begrippen als tekstbestand of niet-tekstbestand. Het kent alleen bestanden. Het is dus aan het programma dat dit bestand gebruikt om te bepalen of het als een tekstbestand wordt behandeld of niet.
- Regel 9 maakt een object aan, waaruit de opdracht set wordt gebruikt voor de toewijzing. Het aanmaken van een tekstbestandsobject verloopt via het aanmaken van twee objecten:
- het aanmaken van een object Scripting.FileSystemObject (regel 7)
- en vervolgens het aanmaken van een object „TextStream” (tekstbestand) via de methode OpenTextFile van het object Scripting.FileSystemObject, dat meerdere parameters toestaat:
- de naam van het te verwerken bestand (verplicht)
- de gebruiksmodus van het bestand. Dit is een geheel getal met 3 mogelijke waarden:
- 1: het bestand in leesmodus gebruiken
- 2: het bestand in schrijfmodus gebruiken. Als het nog niet bestaat en de derde parameter is opgegeven en de waarde 'true' heeft, wordt het aangemaakt; anders niet. Als het al bestaat, wordt het overschreven.
- 8: het bestand in toevoegmodus gebruiken, c.a.d. schrijven aan het einde van het bestand. Als het bestand nog niet bestaat en de derde parameter aanwezig is en de waarde 'true' heeft, wordt het aangemaakt; anders niet.
- regel 11 schrijft een tekstregel met de methode WriteLine van het aangemaakte object TextStream.
- regel 13 „sluit” het bestand. Er kan dan niet meer in worden geschreven of gelezen.
- regel 16 maakt een nieuw object „TextStream” aan om hetzelfde bestand als eerder te bewerken, maar ditmaal in de modus „toevoegen”. De regels die worden geschreven, worden achter de bestaande regels geplaatst.
- regel 18 schrijft twee nieuwe regels, waarbij de constante vbCRLF het einde-van-regel-teken is in tekstbestanden.
- regel 20 sluit het bestand weer
- regel 23 opent het bestand opnieuw in de modus „lezen”: we gaan de inhoud van het bestand lezen.
- Regel 27 leest een tekstregel met de methode ReadLine van het object TextStream. Wanneer het bestand net is „geopend”, staat de cursor op de eerste tekstregel ervan. Zodra deze regel is gelezen door de methode ReadLine, wordt de cursor op de tweede regel geplaatst. De methode Readline leest dus niet alleen de huidige regel, maar ‘gaat’ daarna automatisch door naar de volgende regel.
- Om alle tekstregels te verwerken, moet de methode ReadLine herhaaldelijk in een lus worden toegepast. Deze lus (regel 26) eindigt wanneer het attribuut AtEndOfStream van het object TextStream de waarde true heeft. Dit betekent dan dat er geen regels meer in het bestand te lezen zijn.
6.2. Foutgevallen
Er zijn twee veelvoorkomende foutgevallen:
- een bestand openen om te lezen dat niet bestaat
- Een bestand openen om te schrijven of een bestand toevoegen dat niet bestaat, terwijl de derde parameter in de aanroep van de methode OpenTextFile op `false` is ingesteld.
Het volgende programma laat zien hoe deze fouten kunnen worden gedetecteerd:
6.3. De toepassing IMPOTS met een tekstbestand
We gaan verder met de toepassing voor de belastingberekening, ervan uitgaande dat de gegevens die nodig zijn voor de berekening van de belasting zich in een tekstbestand met de naam data.txt bevinden:
12620 13190 15640 24740 31810 39970 48360 55790 92970 127860 151250 172040 195000 0
0 0,05 0,1 0,15 0,2 0,25 0,3 0,35 0,4 0,45 0,5 0,55 0,6 0,65
0 631 1290,5 2072,5 3309,5 4900 6898,5 9316,5 12106 16754,5 23147,5 30710 39312 49062
De drie regels bevatten respectievelijk de gegevens van de grenswaardetabellen coeffR en coeffN van de applicatie. Dankzij de modularisering van onze applicatie vinden de wijzigingen voornamelijk plaats in de procedure getData, die verantwoordelijk is voor het samenstellen van de drie tabellen. Het nieuwe programma ziet er als volgt uit:
Programma |
|
Opmerkingen:
- in het tekstbestand data.txt kunnen de waarden door één of meerdere spaties worden gescheiden, waardoor het onmogelijk is om de functie split te gebruiken om de waarden uit de regel te halen. Er moest een reguliere expressie worden gebruikt
- De functie getData levert, naast de drie limiettabellen coeffR en coeffN, een resultaat op dat aangeeft of er al dan niet een fout is opgetreden. Dit resultaat is een variant-tabel met twee elementen. Het eerste element is een foutcode (0 als er geen fout is), het tweede element is de foutmelding als er een fout is opgetreden.
- De functie getData controleert niet of de waarden in het bestand data.txt geldig zijn. In de praktijk zou dit wel moeten gebeuren.
