Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Objektet TextFieldParser är ett sätt att enkelt och effektivt parsa strukturerade textfiler, till exempel loggar. Du kan bearbeta en fil med flera format med hjälp PeekChars
av metoden för att fastställa formatet för varje rad när du parsar genom filen.
Så här parsar du en textfil med flera format
Lägg till en textfil med namnet testfile.txt i projektet. Lägg till följande innehåll i textfilen:
Err 1001 Cannot access resource. Err 2014 Resource not found. Acc 10/03/2009User1 Administrator. Err 0323 Warning: Invalid access attempt. Acc 10/03/2009User2 Standard user. Acc 10/04/2009User2 Standard user.
Definiera det förväntade formatet och det format som används när ett fel rapporteras. Den sista posten i varje matris är -1. Därför antas det sista fältet ha variabelbredd. Detta inträffar när den sista posten i matrisen är mindre än eller lika med 0.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Skapa ett nytt TextFieldParser objekt som definierar bredd och format.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
Loopa igenom raderna och testa för format innan du läser.
Dim currentRow As String() While Not MyReader.EndOfData Try Dim rowType = MyReader.PeekChars(3) If String.Compare(rowType, "Err") = 0 Then ' If this line describes an error, the format of the row will be different. MyReader.SetFieldWidths(errorFormat) Else ' Otherwise parse the fields normally MyReader.SetFieldWidths(stdFormat) End If currentRow = MyReader.ReadFields For Each newString In currentRow Console.Write(newString & "|") Next Console.WriteLine()
Skriv fel till konsolen.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Exempel
Följande är det fullständiga exemplet som läser från filen testfile.txt
:
Dim stdFormat As Integer() = {5, 10, 11, -1}
Dim errorFormat As Integer() = {5, 5, -1}
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt")
MyReader.TextFieldType = FileIO.FieldType.FixedWidth
MyReader.FieldWidths = stdFormat
Dim currentRow As String()
While Not MyReader.EndOfData
Try
Dim rowType = MyReader.PeekChars(3)
If String.Compare(rowType, "Err") = 0 Then
' If this line describes an error, the format of the row will be different.
MyReader.SetFieldWidths(errorFormat)
Else
' Otherwise parse the fields normally
MyReader.SetFieldWidths(stdFormat)
End If
currentRow = MyReader.ReadFields
For Each newString In currentRow
Console.Write(newString & "|")
Next
Console.WriteLine()
Catch ex As FileIO.MalformedLineException
MsgBox("Line " & ex.Message & " is invalid. Skipping")
End Try
End While
End Using
Console.ReadLine()
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).