我的文本文件行有时在 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 的更多详细信息。
我有一个文本文件,其中包含不同行中的相同字符串。我使用此代码读取文件:
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 的更多详细信息。