Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Объект TextFieldParser позволяет легко и эффективно анализировать структурированные текстовые файлы, такие как журналы. Вы можете обработать файл с несколькими форматами с помощью PeekChars метода, чтобы определить формат каждой строки при анализе файла.
Анализ текстового файла с несколькими форматами
Добавьте текстовый файл с именемtestfile.txt в проект. Добавьте следующее содержимое в текстовый файл:
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.Определите ожидаемый формат и формат, используемый при сообщении об ошибке. Последняя запись в каждом массиве равна -1, поэтому последнее поле имеет переменную ширину. Это происходит, когда последняя запись в массиве меньше или равна 0.
Dim stdFormat As Integer() = {5, 10, 11, -1} Dim errorFormat As Integer() = {5, 5, -1}Создайте объект TextFieldParser , определяя ширину и формат.
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 Microsoft.VisualBasic. FileIO.MalformedLineException MsgBox("Line " & ex.Message & " is invalid.") End Try End While End Using
Пример
Ниже приведен полный пример, который считывается из файла 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()
Надежное программирование
Следующие условия могут вызвать исключение:
- Не удается проанализировать строку с помощью указанного формата (MalformedLineException). Сообщение об исключении указывает строку, вызывающую исключение, а свойство ErrorLine назначается тексту, содержащемуся в строке.
- Указанный файл не существует (FileNotFoundException).
- Ситуация с частичным доверием, в которой у пользователя нет достаточных разрешений для доступа к файлу. (SecurityException).
- Путь слишком длинный (PathTooLongException).
- У пользователя нет достаточных разрешений для доступа к файлу (UnauthorizedAccessException).