Procedure: lezen uit tekstbestanden met een vaste breedte in Visual Basic
Het TextFieldParser
object biedt een manier om gestructureerde tekstbestanden, zoals logboeken, eenvoudig en efficiƫnt te parseren.
De TextFieldType
eigenschap bepaalt of het geparseerde bestand een bestand met scheidingstekens is of een bestand met vaste breedte. In een tekstbestand met vaste breedte kan het veld aan het einde een variabele breedte hebben. Als u wilt opgeven dat het veld aan het einde een variabele breedte heeft, definieert u het om een breedte te hebben die kleiner is dan of gelijk is aan nul.
Een tekstbestand met vaste breedte parseren
Maak een nieuwe
TextFieldParser
. Met de volgende code wordt deTextFieldParser
benoemde gemaaktReader
en wordt het bestand geopendtest.log
.Using Reader As New Microsoft.VisualBasic. FileIO.TextFieldParser("C:\TestFolder\test.log")
Definieer de
TextFieldType
eigenschap alsFixedWidth
, definieer de breedte en opmaak. Met de volgende code worden de kolommen met tekst gedefinieerd; de eerste is 5 tekens breed, de tweede 10, de derde 11 en de vierde is van variabele breedte.Reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth Reader.SetFieldWidths(5, 10, 11, -1)
Doorloop de velden in het bestand. Als er regels beschadigd zijn, meldt u een fout en gaat u door met parseren.
Dim currentRow As String() While Not Reader.EndOfData Try currentRow = Reader.ReadFields() Dim currentField As String For Each currentField In currentRow MsgBox(currentField) Next Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & "is not valid and will be skipped.") End Try
Sluit de
While
enUsing
blokken metEnd While
enEnd Using
.End While End Using
Opmerking
In dit voorbeeld wordt uit het bestand test.log
gelezen.
Using Reader As New Microsoft.VisualBasic.FileIO.
TextFieldParser("C:\TestFolder\test.log")
Reader.TextFieldType =
Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
Reader.SetFieldWidths(5, 10, 11, -1)
Dim currentRow As String()
While Not Reader.EndOfData
Try
currentRow = Reader.ReadFields()
Dim currentField As String
For Each currentField In currentRow
MsgBox(currentField)
Next
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
"is not valid and will be skipped.")
End Try
End While
End Using
Robuuste programmering
De volgende voorwaarden kunnen een uitzondering veroorzaken:
Een rij kan niet worden geparseerd met behulp van de opgegeven indeling (MalformedLineException). In het uitzonderingsbericht wordt de regel opgegeven die de uitzondering veroorzaakt, terwijl de ErrorLine eigenschap is toegewezen aan de tekst in de regel.
Het opgegeven bestand bestaat niet (FileNotFoundException).
Een gedeeltelijke vertrouwenssituatie waarbij de gebruiker niet over voldoende machtigingen beschikt om toegang te krijgen tot het bestand. (SecurityException).
Het pad is te lang (PathTooLongException).
De gebruiker heeft onvoldoende machtigingen voor toegang tot het bestand (UnauthorizedAccessException).
Zie ook
- Microsoft.VisualBasic.FileIO.TextFieldParser
- Procedure: Lezen uit door komma's gescheiden tekstbestanden
- Procedure: Lezen uit tekstbestanden met meerdere indelingen
- Tekstbestanden parseren met het TextFieldParser-object
- Overzicht: Bestanden en mappen bewerken in Visual Basic
- Problemen oplossen: lezen van en schrijven naar tekstbestanden