Member 13698711 Ответов: 3

Как искать в каталоге файлов .txt определенную строку (слово или фразу)


Привет, я не очень хорошо разбираюсь в кодировании vb.net, мне нужно найти один каталог (c:\K_txt) почти 3000 файлов .txt для любого слова или точной фразы, которую вводит пользователь, а затем загружает список с именами тех файлов txt, которые содержат это слово или фразу. Затем, когда файл в списке будет нажат, он будет загружен в текстовый файл с выделенным каждым экземпляром слова или фразы. Спасибо.

Что я уже пробовал:

Я ничего не пробовал, кроме попытки найти код, который делает это, поскольку это похоже на рутину, которая, вероятно, была написана много-много раз, я собираю фрагменты того или иного аспекта, чтобы я мог собрать кусочки вместе, но так как есть так много файлов, которые нужно пройти (3000) Я знаю, что любая рутина, которую я соберу вместе, будет медленной и неэффективной. У меня есть две книги по программированию на vb, но ничего, что могло бы помочь в этом. Спасибо

3 Ответов

Рейтинг:
2

Afzaal Ahmad Zeeshan

Цитата:
Мне нужно найти один каталог (c:\K_txt) из почти 3000 файлов .txt
Поиск этого на лету-действительно очень плохая идея, и вам придется заставлять ваших пользователей ждать каждый раз, когда они делают изменение в запросе. Хорошим подходом было бы прочитать ваши файлы один раз и создать в них токены (слова на английском языке). Это подскажет вашему алгоритму, какой файл содержит какие слова—вы можете специализировать это на получении предложений, скажем, разделенных точками.

Это поможет вам искать слова в вашей собственной структуре данных; дерево, три, куча, вы выбираете. Это поможет вашим пользователям легко проверить, какие слова доступны в каких файлах, потому что теперь вашему приложению нужно будет только перейти к вашей собственной структуре данных, а не обходить файловую систему еще раз.

Файловая система будет пройдена только один раз. Ваша структура будет содержать данные в упорядоченном и удобном для поиска виде.

Цитата:
либо слово, либо точная фраза, которую вводит пользователь,
Именно моя точка зрения, что происходит, когда пользователь хочет найти "файл" и вводит "fole", ваш алгоритм будет искать "fole" в каталоге, а затем "файл" после того, как он прошел каталог один раз. Не очень хороший подход, и вам нужен альтернативный. Один из таких подходов-с MapReduce, в этом подходе вы будете читать файлы один за другим, подсчитывая общее количество существующих слов и их количество вхождений. Затем вы можете ввести этот результат в свою собственную структуру и запросить его для действительно лучшего подхода, чем тот, который вы рассматриваете.

Смотрите следующие ссылки и узнайте что-то оттуда,
mapreduce - Hadoop поиск слов из одного файла в другой файл - переполнение стека[^]
алгоритмы - пример подсчета слов Hadoop MapReduce - обмен стеками компьютерных наук[^] (Вы можете назвать это поиском слов)
Цитата:
затем загрузите список с именами тех txt файлов, которые содержат это слово или фразу
Ваша структура вернет все, что им нужно, она будет знать, какие файлы содержат "файл", и вернет их в списке—или так, как вы указали.
Цитата:
текстовый файл с выделенным каждым экземпляром слова или фразы
Это зависит от структуры приложения, и я оставлю вас с этим здесь. :-)

Удачи.


Рейтинг:
0

CHill60

Вы можете адаптировать технику, используемую в этой статье CodeProject Для поиска файлов в C#[^]
или вот этот WinSearchFile: как искать файлы на вашем компьютере[^]

Или методы, обсуждаемые здесь .net - c# Самый быстрый поиск строк во всех файлах - переполнение стека[^]