Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

10.1. Tekst Lezen uit een Bestand

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

10.1.1. Stream Objecten

Om tekst te lezen uit een bestand kunnen we gebruik maken van een "stream" ( System.IO.Stream).
Net als een rivierstroom die gebruikt wordt om goederen te vervoeren, kunnen we streamobjecten gebruiken om data te vervoeren.  Deze data kan als bron of bestemming een bestand zijn (System.IO.StreamReader), maar dit kan bijvoorbeeld net zo goed een bepaalde locatie zijn op het netwerk (System.Net.Sockets.NetworkStream) of een bepaalde locatie in het geheugen (System.IO.MemoryStream).

In tegenstelling tot een rivierstroom is het bij streamobjecten niet altijd zo dat men informatie in beide richtingen kan vervoeren.

Steamobjecten kenmerken zich doorgaans in het feit dat ze met "schaarse" bronnen of doelen ("resources") omgaan.  Dergelijke bron/doel (bijvoorbeeld een bestand) kan door verschillende applicaties, componenten, threads, ... gedeeld worden.
Het vrijgeven van de resources - en dus het beschikbaar stellen voor anderen - of simpelweg het finaliseren van de stream (het afwerken en beëindigen van de datatransfer) moet dan doorgaans ook expliciet worden aangegeven.
Om dit (het finaliseren van de stream en eventueel vrijgeven van schaarse bronnen) te verwezelijken is vaak een Close method aanwezig.  In de volgende voorbeelden zal je dan ook zien hoe na gebruik van de streamobjecten de Close method wordt aangeroepen.

10.1.2. System.IO.StreamReader

Om tekst te lezen vanuit een bestand kan je gebruik maken van een  StreamReader object uit de System.IO' namespace.  Deze namespace bevat overigens vele datatypes die bruikbaar zijn om input/output (vandaar IO) operaties uit te voeren doorgaans op het filesysteem (bijvoorbeeld bestanden).

10.1.3. Regel per Regel Inlezen

Veronderstel dat we over volgend bestand (TextFile1.txt) beschikken :
Tekst Bestand
abc
de
f
Bij constructie van een StreamReader object geven we het pad op van het bestand dat onze stream moet gebruiken.
Bemerk dat dit in volgend voorbeeld gaat om een relatief pad (zonder absolute verwijzing naar drive en directories).  Dit veronderstelt dat het bestand zich op dezelfde locatie bevindt als onze applicatie executable.
Visual Studio : Als je dit bestand (TextFile1.txt) aan een Visual Basic project toevoegd en in het Properties toolvenster (Menu : View > Properties Window) de eigenschap Copy to Output Directory op Copy if newer instelt, zal bij elke wijziging aan dit bestand uit het project dit bestand bij het builden van het project ook worden gekopieerd naar de output folder van het project.
Dit is doorgaans de Bin\Debug\ of Bin\Release\ subfolder van de project directory.
Men kan echter ook een absoluut pad naar het bestand opgeven, bijvoorbeeld "C:\Test\TextFile1.txt".

De property EndOfStream van een StreamReader object is bruikbaar om na de gaan of de huidige "cursor" positie zich op het eind van de stream ( bestand) bevindt.

Deze cursor positie wordt beïnvloed door de leesoperaties die worden gemaakt.
Methods als Read, ReadBlock, ReadLine en ReadToEnd (die men kan gebruiken om de inhoud van het bestand in te lezen) zullen dan ook deze cursor (huidige "inleespositie") verplaatsen.

In volgend voorbeeld wordt de ReadLine method geïllustreerd die de inhoud vanaf de huidige cursor positie tot net voor het endline karakter zal gaan opleveren (in tekst (String) vorm).  De cursor wordt hiermee ook verplaatst tot net na het newline karakter.  Dit zorgt ervoor dat een volgende aanroep van deze functie de volgende lijn zal inlezen.  Als we dit herhalen totdat de property EndOfStream False oplevert lezen we in dat geval dus alle regels in.
Visual Basic 2012 Broncode - Codevoorbeeld 296
Module StreamReaderReadLineExample
    Sub Main()
        Dim path As String = "TextFile1.txt"
        Dim streamReader As New System.IO.StreamReader(path)
        '
        Do Until streamReader.EndOfStream
            ' Reading Line by Line :
            Dim line As String = streamReader.ReadLine()
            Console.WriteLine(line)
        Loop
        streamReader.Close()
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
abc
de
f

10.1.4. Volledige Bestandsinhoud Inlezen

Indien je meteen de volledige bestandsinhoud wil inlezen kan je gebruik maken van de ReadToEnd method.  Ook deze zal in String vorm de inhoud opleveren.  Deze keer inclusief de newline karakters.
Visual Basic 2012 Broncode - Codevoorbeeld 297
Module StreamReaderReadToEndExample
    Sub Main()
        Dim streamReader As New System.IO.StreamReader("TextFile1.txt")
        '
        ' Reading Complete File Content :
        Dim fileContent As String = streamReader.ReadToEnd()
        '
        Console.WriteLine(streamReader.EndOfStream) ' (1) True
        '
        streamReader.Close()
        '
        Console.WriteLine(fileContent)
        '
        Console.ReadLine()
    End Sub
End Module
De cursor wordt door ReadToEnd dan ook meteen verplaatst naar de "end-of-stream" positie (1).
Console Application Output
True
abc
de
f
Bemerk overigens ook hoe we hier pas de bestandsinhoud afdrukken nadat de stream werd gesloten (aanroep van de Close method).  Dit is geen probleem gezien de bestandsinhoud hier reeds in het geheugen (variabele fileContent) was ingeladen.
Het is trouwens een goede gewoonte om streamobjecten zo snel als mogelijk te gaan sluiten/finaliseren.

10.1.5. My.Computer.FileSystem.ReadAllText

Door gebruik te maken van de ReadAllText method van het My object My.Computer.FileSystem kan men op nog eenvoudigere wijze de volledige bestandsinhoud inlezen.
Geen gedoe met streamobjecten, of het finaliseren van deze objecten, dit wordt reeds verwezelijkt door deze ReadAllText functie.  Deze zal in String vorm de volledige inhoud van dit bestand opleveren.
Visual Basic 2012 Broncode - Codevoorbeeld 298
Module MyComputerFileSystemReadAllTextExample
    Sub Main()
        Dim path As String = "TextFile1.txt"
        '
        ' Reading Complete File Content :
        Dim fileContent As String
        fileContent = My.Computer.FileSystem.ReadAllText(path)
        '
        Console.Write(fileContent)
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
abc
de
f
Objecten en hun methods uit de My namespace zijn niet in elke .NET taal beschikbaar.  Deze kunnen we echter wel gebruiken in Visual Basic.
Voor meer uitleg over deze namespace verwijs ik naar het desbetreffende topic.

Er is in dit My.Computer.FileSystem object ook method beschikbaar om aparte regels te gaan inlezen.  Ook hierdoor wordt het vaak noodzakelijk om zelf manueel aan de hand van streamobjecten te gaan werken.

Om individuele karakters in te lezen kan je gebruik maken van methods als StreamReader.Read en StreamReader.ReadBlock.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.