使用数组搜索文件VB

时间:2015-10-19 19:38:51

标签: vb.net visual-studio visual-studio-2015

我有一个程序需要逐行查看文本文件,这些行看起来像这样:

10-19-2015  Brett Reinhard  All Bike    Yoga    Run the Studio  Design Your Own Strength

它们由文本文件中的制表符分隔。

我想要做的是查看第二个值,在本例中为“Brett Reinhard”并将整行移至另一个名为“Brett Reinhard”的文本文件

我正在考虑使用数组来检查行中的第二个“列”是否与给定数组中的任何值匹配,如果是,我想执行特定操作。

我想这样做的方式是使用For / next语句,现在它将起作用,对于我将使用它的计算机来说将是一个费力的过程。

我正在考虑使用的代码如下所示:

For intCounter=0 to Whatever Number is the last number of the array

    If currentfield.contains(array(intCounter)) Then

        Open StreamWriter(File directory & array(intcounter) & ".txt")

        Streamwriter.Writeline(currentfield)

    End IF

是否有更好的方法,例如引用行中的第二个“列”,类似于VBA for excel中使用的语法。

Name=Cells(1,2).Value

2 个答案:

答案 0 :(得分:0)

如果您可以保证一行只使用制表符作为字段分隔符,您可以执行以下操作:

  1. 打开阅读文字的流
  2. 打开用于撰写文字的信息流
  3. 阅读一行文字
  4. 使用Split方法将传入行分解为字段数组
  5. 如果数组中的第二个元素是您的sentinel值,请将原始行写入writer
  6. 重复自己,直到你到达文件的末尾(ReadLine将返回Nothing,或者为那些c#folk返回null)。
  7. 关闭并处理您的流对象。
  8. 如果您不确定格式,则需要点击并使用之前评论中提到的TextFieldParser。

答案 1 :(得分:0)

因此,虽然它没有使用数组来搜索文件,但我最终做的也是如此。由于@Martin Soles,我最终使用了拆分方法。

以下是我提出的建议:

 Sub Main()
    Dim intCount As Integer = 1
    Dim words As String
    Dim split As String()
    Using MyReader As New Microsoft.VisualBasic.
                    FileIO.TextFieldParser(
                      "I:\Games, Events, & Promotions\FRP\Back End\Approved.txt")
        MyReader.TextFieldType = FileIO.FieldType.Delimited
        MyReader.SetDelimiters(",")
        Dim currentRow As String()
        While Not MyReader.EndOfData
            Try
                currentRow = MyReader.ReadFields()
                Dim currentField As String
                For Each currentField In currentRow

                    words = currentField
                    split = words.Split(New [Char]() {CChar(vbTab)})

                    For Each s As String In split
                        If intCount = 2 Then
                            Dim file As System.IO.StreamWriter
                            file = My.Computer.FileSystem.OpenTextFileWriter("I:\Games, Events, & Promotions\FRP\Back End\" & s & ".txt", True)
                            file.WriteLine(currentField)
                            file.Close()
                        End If
                        intCount = intCount + 1
                    Next s
                    intCount = 1
                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

End Sub 'Main

谢谢你们的建议。

目前,split方法可以满足需要。