Anvisningar: läsa från textfiler med fast bredd i Visual Basic
Objektet TextFieldParser
är ett sätt att enkelt och effektivt parsa strukturerade textfiler, till exempel loggar.
Egenskapen TextFieldType
definierar om den parsade filen är en avgränsad fil eller en fil som har textfält med fast bredd. I en textfil med fast bredd kan fältet i slutet ha en variabelbredd. Om du vill ange att fältet i slutet har en variabelbredd definierar du att det ska ha en bredd som är mindre än eller lika med noll.
Så här parsar du en textfil med fast bredd
Skapa en ny
TextFieldParser
. Följande kod skapar namnetTextFieldParser
Reader
och öppnar filentest.log
.Using Reader As New Microsoft.VisualBasic. FileIO.TextFieldParser("C:\TestFolder\test.log")
TextFieldType
Definiera egenskapen somFixedWidth
, som definierar bredd och format. Följande kod definierar kolumnerna i text; den första är 5 tecken bred, den andra 10, den tredje 11 och den fjärde är av variabel bredd.Reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.FixedWidth Reader.SetFieldWidths(5, 10, 11, -1)
Loopa igenom fälten i filen. Om några rader är skadade rapporterar du ett fel och fortsätter parsningen.
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
Stäng blocken
While
ochUsing
medEnd While
ochEnd Using
.End While End Using
Exempel
Det här exemplet läser från filen test.log
.
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
Robust programmering
Följande villkor kan orsaka ett undantag:
Det går inte att parsa en rad med det angivna formatet (MalformedLineException). Undantagsmeddelandet anger den rad som orsakar undantaget, medan ErrorLine egenskapen tilldelas till texten som finns på raden.
Den angivna filen finns inte (FileNotFoundException).
En partiell förtroendesituation där användaren inte har tillräcklig behörighet för att komma åt filen. (SecurityException).
Sökvägen är för lång (PathTooLongException).
Användaren har inte tillräcklig behörighet för att komma åt filen (UnauthorizedAccessException).