Porady: odczyt z plików tekstowych w wielu formatach w Visual Basic
TextFieldParser Obiektu daje możliwość łatwego i efektywnego analizować pliki tekstowe strukturalne, takie jak dzienniki.Plik z wielu formatów można przetwarzać przy użyciu PeekChars metodę, aby określić format każdego wiersza, jak analizować za pomocą pliku.
Aby analizować plik tekstowy z wielu formatów
Dodawanie pliku tekstowego o nazwie plik_testowy.txt do swojego projektu.Dodaj następującą zawartość do pliku tekstowego.
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.
Definiowanie i oczekiwane format używane po zaraportowaniu błąd.Ostatni wpis w tablicy każdego jest -1, dlatego ostatniego pola przyjmowana jest wartość zmiennej szerokości.Dzieje się tak, gdy ostatni wpis w tablicy jest mniejsza niż lub równa 0.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}
Utwórz nowy TextFieldParser obiektu, określającą szerokość i format.
Using MyReader As New FileIO.TextFieldParser("..\..\testfile.txt") MyReader.TextFieldType = FileIO.FieldType.FixedWidth MyReader.FieldWidths = stdFormat
W pętli wierszy, badania na format przed czytania.
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()
Błędy zapisu do konsoli.
Catch ex As Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Przykład
Oto kompletnym przykładzie, w którym czyta się od pliku 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()
Stabilne programowanie
Następujące warunki, może spowodować wyjątek:
Wiersza nie można analizować przy użyciu określonego formatu (MalformedLineException).Komunikat wyjątku Określa wiersz, powodując wyjątek, podczas gdy ErrorLine właściwość jest przypisany do tekstu zawartego w wierszu.
Określony plik nie istnieje (FileNotFoundException).
Sytuacja częściowego zaufania, użytkownik nie ma wystarczających uprawnień do uzyskania dostępu do pliku.(SecurityException).
Ścieżka jest zbyt długa (PathTooLongException).
Użytkownik nie ma wystarczających uprawnień do uzyskania dostępu do pliku (UnauthorizedAccessException).
Zobacz też
Zadania
Porady: odczyt z rozdzielonych przecinkami plików testowych w Visual Basic
Porady: odczyt z plików testowych o stałej szerokości w Visual Basic
Informacje
Koncepcje
Analizowanie plików tekstowych za pomocą obiektu TextFieldParser (Visual Basic)