如何:在 Visual Basic 中读取定宽文本文件
TextFieldParser
对象提供一种可以轻松而高效地分析结构化文本文件(如日志)的方法。
TextFieldType
属性定义分析的文件是带分隔符的文件还是具有定宽文本字段的文件。 在定宽文本文件中,结尾处的字段可以具有可变宽度。 若要指定结尾处的字段具有可变宽度,请将它定义为宽度小于或等于零。
分析定宽文本文件
创建新的
TextFieldParser
。 下面的代码创建名为Reader
的TextFieldParser
,并打开test.log
文件。Using Reader As New Microsoft.VisualBasic. FileIO.TextFieldParser("C:\TestFolder\test.log")
将
TextFieldType
属性定义为FixedWidth
(定义宽度和格式)。 下面的代码定义文本的各列;第一列宽度为 5 个字符,第二列宽度为 10 个字符,第三列宽度为 11 个字符,而第四列宽度可变。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
结束While
和Using
块。End While End Using
示例
此示例读取文件 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
可靠编程
以下情况可能会导致异常:
无法使用指定的格式分析行 (MalformedLineException)。 此异常消息指定导致发生异常的行,同时将 ErrorLine 属性分配给该行中包含的文本。
指定的文件不存在 (FileNotFoundException)。
在部分信任的情况下,用户没有足够的权限访问文件。 (SecurityException).
路径过长 (PathTooLongException)。
用户没有足够的权限访问文件 (UnauthorizedAccessException)。