Vb.net VB读取分隔文本文件数组

Vb.net VB读取分隔文本文件数组,vb.net,visual-studio,Vb.net,Visual Studio,我有一个由管道分隔的文本文件。我想读取第五个管道的值,但我不知道如何读取。我所能做的就是读取数组的每个部分。找不到这方面的例子 EPD|TR2999-01G|SEMI, TRANS, P-CH, SEL|ACTIVE|PS.COE.6|SCS|SCREENEDCOMPONENTS|EPP|Buy|6.237|916.839|147||181|||CCACOE||PS.777.||150||

我有一个由管道分隔的文本文件。我想读取第五个管道的值,但我不知道如何读取。我所能做的就是读取数组的每个部分。找不到这方面的例子

    EPD|TR2999-01G|SEMI, TRANS, P-CH, SEL|ACTIVE|PS.COE.6|SCS|SCREENEDCOMPONENTS|EPP|Buy|6.237|916.839|147||181|||CCACOE||PS.777.||150||                                                                                                                              
    EPD|TR2309-01G|SEMI, TRANS, P-CH, SEL|ACTIVE|PS.COE.6|SCS|SCREENED COMPONENTS|EPP|Buy|6.237|193.347|31||181|||777||PS.777.||150||

本例使用的文本文件中有以下两行:

第1行:EPD | TR2999-01G |半、TRANS、p-CH、SEL |主动| PS.COE.6 | SCS |筛选组件| EPP |购买| 6.237 | 916.839 | 147 181 | CCACOE | PS.777|‌​|一百五十||

第2行:EPD | TR2309-01G |半、变速、p-CH、SEL |主动| PS.COE.6 | SCS |筛选组件| EPP |购买| 6.237 | 193.347 | 31 | 181 | | | | 777 | PS.777 | 150‌​||


我刚刚测试了这个,您只需在第二行输入完整的文件路径

这个示例使用一个包含以下两行的文本文件:

第1行:EPD | TR2999-01G |半、TRANS、p-CH、SEL |主动| PS.COE.6 | SCS |筛选组件| EPP |购买| 6.237 | 916.839 | 147 181 | CCACOE | PS.777|‌​|一百五十||

第2行:EPD | TR2309-01G |半、变速、p-CH、SEL |主动| PS.COE.6 | SCS |筛选组件| EPP |购买| 6.237 | 193.347 | 31 | 181 | | | | 777 | PS.777 | 150‌​||


我刚刚测试了这个,您只需在第二行输入完整的文件路径

这是什么意思?将每一行拆分为一个数组并读取第五个值正是您实现目标所需要的…那么该方法有什么问题,或者该方法对您不起作用呢?这里可能的副本是最有可能使用的文件的几行。在本例中,零件号位于第二根管道之前。该值位于第10个管道之前。EPD | TR2999-01G | SEMI,TRANS,P-CH,SEL | ACTIVE | PS.COE.6 | SCS |筛选组件| EPP | Buy | 6.237 | 916.839 | 147 181 | CCACOE | PS.777 | 150 | EPD | TR2309-01G | TRANS,SEL | ACTIVE | PS.COE.6 | SCS |筛选组件| EPP | Buy | 6.237 | 193.347 | 31 | 181 | 777 | PS.777.| | 150 | | | | |这是第一个问题,代码正在搜索零件号的特定段,而我在搜索第三个。如果零件号实际上在第二段中,它将找不到任何东西。我将用一个我刚刚测试过的工作示例来替换我的答案你是什么意思?将每一行拆分为一个数组并读取第五个值正是您实现目标所需要的…那么该方法有什么问题,或者该方法对您不起作用呢?这里可能的副本是最有可能使用的文件的几行。在本例中,零件号位于第二根管道之前。该值位于第10个管道之前。EPD | TR2999-01G | SEMI,TRANS,P-CH,SEL | ACTIVE | PS.COE.6 | SCS |筛选组件| EPP | Buy | 6.237 | 916.839 | 147 181 | CCACOE | PS.777 | 150 | EPD | TR2309-01G | TRANS,SEL | ACTIVE | PS.COE.6 | SCS |筛选组件| EPP | Buy | 6.237 | 193.347 | 31 | 181 | 777 | PS.777.| | 150 | | | | |这是第一个问题,代码正在搜索零件号的特定段,而我在搜索第三个。如果零件号实际上在第二段中,它将找不到任何东西。我将用一个我刚刚测试过的工作示例来替换我的答案。这就是我需要的,谢谢。现在我正努力在第三根管道之前的同一个文件中搜索零件号,然后读取该行的第五个值。这让我走上了正确的轨道。。。我感谢你的帮助。如何从按钮调用此函数?只需调暗一个变量以保持其返回值,然后调用该函数,如果在文本文件中找到零件号,则它将为变量赋值。您所需要做的就是将文件路径传递给函数,以便它知道要查找的位置,以及它要查找的零件号,如上图所示。我将“value”作为零件号,并在“If line(2).equals”行中获取一个错误。我似乎无法在这个网站上正确发布我的代码。好吧,这段代码在语法上没有问题,我已经测试过了,运行良好……因此,如果没有任何关于您的异常的进一步信息,我真的无法做更多。我建议你在函数的开头设置一个断点,一行一行地遍历它,在每一步将鼠标悬停在变量上并检查它们的值,当它出错时,发布异常。这是我需要的,谢谢。现在我正努力在第三根管道之前的同一个文件中搜索零件号,然后读取该行的第五个值。这让我走上了正确的轨道。。。我感谢你的帮助。如何从按钮调用此函数?只需调暗一个变量以保持其返回值,然后调用该函数,如果在文本文件中找到零件号,则它将为变量赋值。您所需要做的就是将文件路径传递给函数,以便它知道要查找的位置,以及它要查找的零件号,如上图所示。我将“value”作为零件号,并在“If line(2).equals”行中获取一个错误。我似乎无法在这个网站上正确发布我的代码。好吧,这段代码在语法上没有问题,我已经测试过了,运行良好……因此,如果没有任何关于您的异常的进一步信息,我真的无法做更多。我建议您在函数的开头设置一个断点,并逐行遍历它,在每一步将鼠标悬停在变量上并检查它们的值,当它出错时,发布异常
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim fp as string = "" 'enter the full path to your file here
    Dim value as string = GetValueForPart(fp, Me.TextBox1.Text)
    MsgBox(value) 'in this example, value is set to "6.237" when textbox input is "TR2999-01G"
End Sub

Private Function GetValueForPart(ByVal filepath As String, ByVal SearchPartNum As String) As String
    If Not File.Exists(filepath) Then Return Nothing
    If SearchPartNum Is Nothing OrElse SearchPartNum.Trim = "" Then Return Nothing
    Dim ret As String = Nothing
    Using sr As New StreamReader(filepath)
        Do While sr.Peek >= 0
            Dim line() As String = sr.ReadLine.Split(CChar("|"))
            If line IsNot Nothing AndAlso line.Count >= 5 Then
                If line(1).Equals(SearchPartNum) Then
                    ret = line(9)
                    Exit Do
                End If
            End If
        Loop
    End Using
    Return ret
End Function