30

Программа на C# для поиска текста внутри файлов

Хочу поделиться с вами своим примером программы для поиска текста внутри вордовских документов. Такая необходимость у меня возникла на работе, так как Windows отказался искать текст внутри документов в расшаренных по сети папках, и поэтому я решил что было бы интересно сделать это самому. В итоге появилось такое консольное приложение, где можно в консоль перенести папку с документами (docx, xlsx, txt), обозначить слово для поиска и программа выдаст все документы где это слово встречается. Вот как это выглядит:

Программа на C# для поиска текста внутри файлов

Сложность поиска внутри документов docx и xlsx по сравнению с обычными текстовыми файлами заключается в том, что это zip архивы и для того чтобы искать текст в документе его сначала нужно разархивировать, но как оказалось это совсем не сложно, на сайте майкрософта есть примеры. Самое классное для меня было то, что программу можно скомпилировать из обычной командной строки: накидал код в блокноте, скомпилировал и можно пользоваться.


Программа уместиласть в 58 строк кода и конечно же там есть немало проблем, но свою функцию программа выполняет. Одна из известных мне проблем это то, что xml файл который содержит текст документа, еще и содержит вспомогательный текст в виде xml тегов и, соответственно, они тоже попадают в данные поиска. То есть если задать в поиск слово version - абсолютно все документы попадут в найденные, так как все они начинаются со слов <?xml version="1.0" ... Так же есть проблема что поиск не прекращается после находки слова, и выдает в результаты столько раз один документ, сколько он содержит искомое слово.


Сам код программы лежит на гитхабе DocxTextFinder


Интересно услышать конструктивную критику и надеюсь программа будет полезна не только мне)

ИТ-проекты пикабушников

777 постов3.5K подписчиков

Правила сообщества

0. Запрещены посты вне тематики сообщества

1. Уважайте труд людей, пишите только конструктивную критику,

2. Не выкладывайте информацию по своему проекту чаще 2ух раз в месяц

1
Автор поста оценил этот комментарий

MSBuild можно использовать из консоли без студии. Идея в том, чтобы описать структуру проекта с зависимостями в *.csproj-файле (тута сказ о том, как его сделать: https://docs.microsoft.com/en-us/visualstudio/msbuild/walkth...) и билдить его короткой командой.


А актуальный .NET 5 SDK имеет богатый набор консольных утилит (https://docs.microsoft.com/en-us/dotnet/core/tools/), в том числе для работы с csproj и sln-файлами.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Спасибо!  Я не знал об этом, буду изучать)

1
Автор поста оценил этот комментарий

"поиск не прекращается после находки слова" - еще строчка для прекращения поиска в текущем файле.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Кажется я понял, есть если слово найдено, то перейти к следующей итерации.

показать ответы
1
Автор поста оценил этот комментарий

Но почему не .NET 5, а вообще 4й фреймворк? И почему не MSBuild, а голым компилятором?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вообще глупая отмазка, но у меня на компе вижуалстудия думаю будет тормозить - ноуту больше 10 лет, 2 гига оперативы всего. Интересно было именно так)

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Фар-менеджера что ли нет? )))

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня нету)

Надо бы поставить и попробовать, там есть кажется много классных штук

показать ответы
1
Автор поста оценил этот комментарий

notepad++ ищет

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В вордовских тоже ищет? Я просто давно еще пытался, но почему-то не сообразил как это сделать ..

показать ответы
1
ping localhost
Автор поста оценил этот комментарий

если папок немного, то можно сделать папку как сетевой диск, в проводнике в корне "map network drive" будет удобнее

а вообще проги с поиском по содержимому, где можно выбрать glob-ом имя или расширение файла:

1) git, дает функционал как в unix, то есть grep и другие командлеты из никсов

2) мой самый частый вариант notepad++ очень интуитивный поиск

3) far manager, но надо будет подразобраться в кнопках, но большинство людей, которые знают куда жать потом на проводник смотрят с некоторой ухмылкой

4) cmd.exe но для работы с find придется сначала подключить сетевую папку как диск, либо как описано выше, либо через командлет "pushd"- он сделает тоже самое +павершелл, но мне лень искать как это делается там


если папок немного и думать не охота, то оптимальный вариант расшаренную папку сделать как диск, а далее использовать notepad++

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

8
Автор поста оценил этот комментарий

Минуточку.

Но ведь 10-я винда сама умеет искать так, если папка занесена в список индексируемых.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

У меня 7, и в сетевых папках она почему-то не хочет искать...

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества