Vb.net 使用具有不同固定长度的TextFieldParser

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个字符。我可以有一个分发域或多个分发域以及支付域

我有一个系统正在生成一个包含未知数据量的文本文件。我有两个独立的代码块,一个用于支付,一个用于分发。我知道我将至少有一个付款和一个分发(付款有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个字符。我可以有一个分发域或多个分发域以及支付域,但支付域不按顺序排列

支付结构示例[不删除空格]我需要维护该结构,以防有值:

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是这两种不同的行类型都在同一个文件中。例如,它可以是:支付,分配,分配,分配,支付,分配,分配,支付。。。等等,谢谢。很抱歉反应太晚,我被另一个项目耽误了。