Поиск MS Word бинарный файл для конкретного содержимого - PullRequest
0 голосов
/ 04 марта 2011

У меня есть несколько двоичных файлов .doc, хранящихся в моей базе данных, и я хотел бы теперь найти их все (не преобразовывая их в .doc), чтобы увидеть, какой из них содержит, например, слово "hello".

Есть ли способ выполнить этот поиск в двоичном файле?

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Вы можете пойти по пути использования коммерческих инструментов. Aspose.Words может загружать документ из потока и имеет все виды методов для поиска текста в документе.

Если у вас есть поток из БД, то ваш код будет выглядеть следующим образомthis:

Aspose.Words.Document doc = new Aspose.Words.Document(streamObjectFromDatabase);

if (doc.GetText().ToLower().Contains("hello world"))
  MessageBox.Show("Hello World exists");

Примечание. Преимущество этого инструмента в том, что он не требует установки объектов Word и может работать с потоками в памяти.

0 голосов
/ 04 марта 2011

Не без большой боли, насколько я могу судить. Согласно Википедии , Microsoft за последние несколько лет наконец выпустила спецификацию .doc. Таким образом, вы можете создать парсер на основе спецификации, если у вас есть время, при условии, что все ваши документы имеют одинаковую версию формата .doc.

Конечно, вы можете просто искать текст, который вы ищете, среди всех двоичных данных, при условии, что фактический текст хранится в виде простого текста. Но даже если бы это предположение было верным, как вы могли быть уверены, что найденный вами простой текст был фактическим текстом документа, а не некоторыми метаданными документа, которые также хранятся в виде простого текста? И всегда есть вероятность, что двоичные данные будут соответствовать вашему текстовому шаблону.

Если вам доступны библиотеки Word, я бы пошел по этому пути. Если нет, то доморощенный парсер может быть наименее плохим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...