Поиск с учетом регистра из текстового файла исправить? - PullRequest
2 голосов
/ 11 января 2020

Несколько дней go я задавал вопрос о переполнении стека, спрашивая, как искать в текстовом файле соответствующие строки из текстового поля поиска. До сих пор это прекрасно работало, за исключением того, что поиск был чувствителен к регистру. Я думал о способе преодоления этого, однако это не сработало бы так, как мне бы этого хотелось.

Моя идея / решение:

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. сотрудниками, выполняющими свою работу, они вводят поиск по названию компании или справочному номеру в поле поиска, и в списке появляется соответствующий результаты путей, которые содержат ключевые слова, которые были введены в текстовое поле поиска.

Эта часть отлично работает - кроме того, что поле списка не заполняется результатами, если в моем поиске прописная буква, и строка в текстовый файл, например, отсутствует.

Если кто-то может помочь составить (или реконструировать) фрагмент кода, который ищет текстовый файл (пытаясь сохранить код выше, если это возможно), в то время как поиск не выполняется. чувствительно, это было бы очень ценно.

1 Ответ

2 голосов
/ 11 января 2020

Не используйте функцию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...