Vb.net 使用具有不同固定长度的TextFieldParser
我有一个系统正在生成一个包含未知数据量的文本文件。我有两个独立的代码块,一个用于支付,一个用于分发。我知道我将至少有一个付款和一个分发(付款有23个不同宽度的字段,分发有12个字段) 付款字段长度为:Vb.net 使用具有不同固定长度的TextFieldParser,vb.net,parsing,text,Vb.net,Parsing,Text,我有一个系统正在生成一个包含未知数据量的文本文件。我有两个独立的代码块,一个用于支付,一个用于分发。我知道我将至少有一个付款和一个分发(付款有23个不同宽度的字段,分发有12个字段) 付款字段长度为:{10,1,10,8,1,20,13,1,8,8,8,40,40,40,40,40,25,2,9,40,10,20,6} 分布字段长度为:{10,1,10,20,40,13,1,40,40,10,1,14} 付款字段为400个字符,然后分发字段为200个字符。我可以有一个分发域或多个分发域以及支付域
{10,1,10,8,1,20,13,1,8,8,8,40,40,40,40,40,25,2,9,40,10,20,6}
分布字段长度为:{10,1,10,20,40,13,1,40,40,10,1,14}
付款字段为400个字符,然后分发字段为200个字符。我可以有一个分发域或多个分发域以及支付域,但支付域不按顺序排列
支付结构示例[不删除空格]我需要维护该结构,以防有值:
00000041285111 20140106EDA0000-001 0000010636317+201401012014010320140106 Some Tax Company Non testing agency service TEST GROUP INC 11#####23
00000041286111 DA0000-005 0000000016731+ 666111 98552
分布结构示例[不删除空格]我需要维护该结构,以防有值:
00000041285111 20140106EDA0000-001 0000010636317+201401012014010320140106 Some Tax Company Non testing agency service TEST GROUP INC 11#####23
00000041286111 DA0000-005 0000000016731+ 666111 98552
我需要能够解析第一次付款,收集固定长度的所有值,并以某种方式将字段长度切换为分发字段,直到我获得所有这些字段,如果返回到付款,则将其切换回
以下是我的代码:
Using MyReader As New Microsoft.VisualBasic.FileIO.
TextFieldParser("C:\COM_20140103_173912.txt")
'This field parser gives me the first 400characters with not problems
MyReader.TextFieldType =
Microsoft.VisualBasic.FileIO.FieldType.FixedWidth
MyReader.FieldWidths = {10, 1, 10, 8, 1, 20, 13, 1, 8, 8, 8, 40, 40, 40, 40, 40, 25, 2, 9, 40, 10, 20, 6}
Dim currentRow As String()
While Not MyReader.EndOfData
Try
currentRow = MyReader.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
我从你那里得到这个密码
我已经做了研究,我不知道如何操纵它来做我需要它做的事情。任何帮助都将不胜感激。我希望我提供了足够的信息,如果你需要我以不同的方式解释,我可以
谢谢,
约翰有一个主意。TextFielParser构造函数还可以将流作为其参数。使用常规StreamReader逐行读取文件,然后使用带有TextFieldParser的StringReader根据每一行的长度处理每一行。类似以下内容(未经测试):
这两种不同的行类型都在同一个文件中吗?行的长度是否是唯一表明它是付款记录或分发记录的标志?@ChrisDunaway是这两种不同的行类型都在同一个文件中。例如,它可以是:支付,分配,分配,分配,支付,分配,分配,支付。。。等等,谢谢。很抱歉反应太晚,我被另一个项目耽误了。