我有一个我需要解析的固定位置ascii文件。该文件作为包含数百或数千行的文本文档传入。每行宽约100个字符。每个数据元素的长度都不同。我真的不想手动解析每个数据元素。我记得方式,回到我用“C”编码的那一天,我们可以获取一些数据,并覆盖一个结构,然后引用结构中的数据元素。我做了一些研究,我没有看到任何关于如何在C#中执行此操作的可靠示例。有关如何解析此数据的任何建议吗?
这是数据的示例:
John Doe先生123 Main St. New York NY11111
MrsMelissa Schwartzen4444 Mississippi St.Philadelphia PA11111
标题 - 从第0列开始,长度为3。 FirstName - 从第3列开始,长度为10。 LastName - 从第13列开始,长度为10。 地址 - 从第23栏开始,长度为20。 城市 - 从第43栏开始,长度为15。 状态 - 从第58列开始,长度为2。 Zip - 从第60列开始,长度为5.
解析这些数据的第一个想法可能是遍历文件中的每一行并获得Title,FirstName,LastName,Address等的子字符串。但是必须有一种更优雅的方法来解析这些数据。这就是为什么我问是否有办法使用指针并用结构覆盖数据。这是一个非托管解决方案,但我想不出更好的方法来解决这个问题。除非你们中的一个聪明聪明的人能够提出建议。
答案 0 :(得分:0)
微软足以为我们提供TextFieldParser课程。
这是example如何使用它。
示例页面中的代码
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