首页 > 解决方案 > 我的文本文件行有时在 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 个子字符串(固定宽度字段):

圣人、奥古斯丁和教会的医生。

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

圣、莫妮卡和圣奥古斯丁的母亲

当我想阅读时,我的代码给了我两个奥古斯丁,并混合了奥古斯丁和莫妮克!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

标签: vb.nettext-files

解决方案


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

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

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

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

像这样把它们放在一起:

'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 的更多详细信息。


推荐阅读