前几天我问过a question在 Stack Overflow 上,询问如何从搜索文本框中搜索文本文件以匹配字符串。到目前为止,这种方法效果很好,除了搜索区分大小写这一事实之外。我想到了一种克服这个问题的方法,但是它不会按照我所希望的方式工作。
我的想法/解决方案:
If ListBox.Items.Count = 0 Then
tbx_FindText.CharacterCasing = CharacterCasing.Upper
ElseIf ListBox.Items.Count = 0 Then
tbx_FindText.CharacterCasing = CharacterCasing.Lower
End If
这本质上会尝试完全大写和小写,但是如果用户键入诸如“Gsk”之类的搜索请求,那么会发生什么,“G”是大写的,但其他字符不是大写的(因为字符串是混合大小写,不完全大写或小写),如果它与文本文件中的字符串不完全相同(无论是完全大写或小写还是混合大小写,则程序报告没有搜索结果,如果有 - 只是使用的搜索算法区分大小写并且无法正确识别/搜索它。
搜索算法代码:
Dim lines1() As String = IO.File.ReadAllLines("C:\ProgramData\WPSECHELPER\.data\Outlook Folder Wizard\outlookfolders.txt")
lbx_OFL_Results.Items.Clear()
lbx_OFL_Results.BeginUpdate()
For i As Integer = 0 To lines1.Length - 1
If lines1(i).Contains(tbx_FindText.Text) Then lbx_OFL_Results.Items.Add(lines1(i))
Next
lbx_OFL_Results.EndUpdate()
本质上,代码打开文本文件,其中包含员工完成工作所需的多个 Outlook 文件夹路径。他们在搜索框中输入对公司名称或引用号的搜索,列表框中会填充包含在搜索文本框中输入的关键字的路径的匹配结果。
该部分效果很好 - 除了以下事实之外:如果我的搜索是大写的,则列表框不会填充结果,而文本文件中的字符串则不是大写的。
如果有人可以帮助编写(或重建)一段搜索文本文件的代码(如果可能的话,尝试保留上面的代码),同时搜索不区分大小写,我们将不胜感激。
最佳答案
不要使用ReadAllLines
函数,因为您不需要从文本文件中获取所有行。此函数将所有不必要的内容加载到内存中,尤其是在处理大文件时。使用 ReadLines
代替 where
扩展函数来获取匹配项:
Dim path As String = "C:\ProgramData\WPSECHELPER\.data\Outlook Folder Wizard\outlookfolders.txt"
Dim search As String = tbx_FindText.Text
Dim lines = File.ReadLines(path).Where(
Function(l) l.IndexOf(search, 0, StringComparison.InvariantCultureIgnoreCase) >= 0
).ToList
lbx_OFL_Results.DataSource = Nothing
lbx_OFL_Results.DataSource = lines
关于vb.net - 从文本文件修复区分大小写的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689016/