我的文本文件行有时在 vb.net 中包含相同的字符串

My text file lines sometimes contain the same string in vb.net

我有一个文本文件,其中包含不同行中的相同字符串。我使用此代码读取文件:

Dim readTexte() As String = File.ReadAllLines(OuvrirFichier, Encoding.UTF8)
Dim t As String
For Each t In readTexte
    If t.Contains(TreeView1.SelectedNode.Text) Then
        TextBox2.Text = Trim(t.Substring(0, 18))
        TextBox1.Text = Trim(t.Substring(18, 90))
        TextBox4.Text = Trim(t.Substring(107, 120))
    End If
Next

但是,我有一个问题,因为在切割和读取这些字符串时。该代码无法选择正确的行来匹配 TreeView 节点,因为它标识了几个同样完美的字符串。

例如,第一行包含3个子字符串(固定宽度字段):

Saint, Augustine, and Doctor of the Church.

第二行也包含三个子字符串,略有不同:

Saint, Monica, and mother of Saint Augustine

当我想阅读时,我的代码给了我两个 Augustines,并且混合了 Augustine 和 Monique! TextBox2 包含树视图中包含的字符串。

我该如何解决这个问题?

尽可能简单地创建树视图,因此:

Dim readText () As String = File.ReadAllLines (OpenFile,
Encoding.UTF8)
              Dim s As String
              For Each s In readText
                  TextBox2.Text = Trim (s.Substring (0, 18))
                  TextBox1.Text = Trim (s.Substring (18, 90))
                  TextBox4.Text = Trim (s.Substring (107, 120))
                  Dim node As TreeNode = Me.TreeView1.Nodes (0)
                  TreeView1.Nodes (0) .Nodes.Add (New TreeNode (TextBox1.Text))
              Next

在我们回答这个问题之前,我们需要更多地了解 TreeView 是如何构建的。可能现在与 TreeView 关联的数据不足,解决方案将在代码的完全不同的区域。

不过,我可以提供一些注释。首先,读取文件是计算机中最慢的事情之一。我们已经看到它足够小以适合内存;如果它也相当稳定(不经常更改),您可以通过在程序启动时加载到数组 一次 来节省大量工作。

接下来,我不会只保留一个简单的字符串数组。相反,我会在加载时将数据解析为单独的字段。元组、Class,甚至字符串数组都可以。

最后,即使找到匹配项,此代码仍将继续循环。一旦我们找到我们要找的东西,我就有办法停下来。

像这样把它们放在一起:

'Create a set of Tuples. Could also use a class here.
Dim readTexte() As IEnumerable(Of (String, String, String)) = 
    File.ReadLines(OuvrirFichier, Encoding.UTF8).
        Select(Function(line) (Trim(line.SubString(0, 18)), Trim(line.SubString(18,90)), Trim(line.SubString(107,120))) )
             

'Search the collection for the first match             
Dim result = readTexte.First(Function(record) TreeView1.SelectedNode.Text.Equals(record.Item1))
TextBox2.Text = result.Item1
TextBox1.Text = result.Item2
TextBox4.Text = result.Item3

同样,这并不能解决您的匹配问题,因为该问题不包含我们需要帮助解决的信息。请编辑问题以包含有关如何创建 TreeView 的更多详细信息。