C поиск в word

Обновлено: 08.07.2024

Закрыт 5 лет назад .

53 1 1 золотой знак 2 2 серебряных знака 9 9 бронзовых знаков кому не ясна суть вопроса, посмотрите на ответы, если ответы не ясны, оставьте комментарий под соответствующим ответом

Вот ответ, разбирайтесь:

9,653 11 11 золотых знаков 44 44 серебряных знака 100 100 бронзовых знаков Данный код ищет подстроку, а не слово в файле, т.е., он найдёт "фон" если файл содержит "телефон", хотя самого слова "фон" в файле может и не быть. Необходимо проверять на ошибки после file.get(c) , в противном случае можно мусор записать в s строку. Вот рабочий способ считывания файла в строку целиком. Можно ещё упомянуть, что необходимо изменить код, чтобы можно было передать Юникодные имена файлов и входное слово для поиска на Винде. @jfs счас подумал, можно добавить пару пробелов по обеим концам, чтоб слово полностью совпало, это несложно и загружать можно тоже по словам, ориентируясь по пробелам

istream_iterator<string> + find алгоритм являются простым способом определить, содержит ли файл, данное отделённое пробелами слово, используя линейный поиск:

Например, если слово задано с коммандной строки, а файл передаётся на стандартном вводе:

Поиск работает, потому что istream_iterator<string> вызывает cin >> next_word внутри, который пропускает пробелы по умолчанию ( skipws флаг установлен) и find алгоритм затем просто сравнивает next_word == word .

Что такое пробел, а значит и что такое слово может зависеть от текущей локали.

На системах с utf-8 локалью, код работает как есть с произвольным Юникодным текстом (поддержка нескольких языков в одном документе, поддержка эмотиконов и т.д., правда Юникодные пробелы не распознаются). Windows может испортить входной поток за счёт неявных (codepage) преобразований байтового потока -- как прочитать Юникодный текст на Windows лучше задать как отдельный вопрос.

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

Существует множество строковых алгоритмов, которые помогают найти подстроку в строке, например, алгоритм Ахо—Корасик (мог быть использован для реализации fgrep ) может быть эффективнее в некоторых случаях чем наивный линейный поиск. Связанный вопрос: Поиск повторяющихся строк.

Выполняет указанную операцию поиска. Возвращает True, если операция поиска будет успешной. Логическое значение.

Синтаксис

выражения. Выполнение (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms , Forward , Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)

выражение (обязательно). Переменная, представляюная объект Find.

Параметры

Имя Обязательный или необязательный Тип данных Описание
FindText Необязательный Variant Текст, который необходимо искать. Используйте пустую строку ("") для поиска только форматирования. Вы можете искать специальные символы, указав соответствующие коды символов. Например, "^p" соответствует знаку абзаца, а "^t" соответствует символу вкладки.
MatchCase Необязательный Variant True, чтобы указать, что текст поиска должен быть чувствительным к делу. Соответствует контрольной окне "Совпадение" в диалоговом окне Найти и заменить (Изменить меню).
MatchWholeWord Необязательный Variant Правда, чтобы операция поиска найдите только целые слова, а не текст, который является частью более крупного слова. Соответствует диалоговой окне Найти целые слова только в диалоговом окне Найти и заменить.
MatchWildcards Необязательный Variant True to have the find text be a special search operator. Соответствует контрольной окне Use wildcards в диалоговом окне Найти и заменить.
MatchSoundsLike Необязательный Variant True, чтобы операция поиска найдите слова, которые звучат так же, как найти текст. Соответствует диалоговой окне "Звуки", как в диалоговом окне Найти и заменить.
MatchAllWordForms Необязательный Variant Правда, чтобы операция поиска найдите все формы текста поиска (например, "sit" находит "сидя" и "sat"). Соответствует поле Найти все формы слов в диалоговом окне Найти и заменить.
Forward Необязательный Variant True для поиска вперед (ближе к концу документа).
Wrap Необязательный Variant Контролирует, что происходит, если поиск начинается в точке, не в начале документа и в конце документа достигается (или наоборот, если форвард настроен на False). Этот аргумент также контролирует, что происходит, если есть выбор или диапазон и текст поиска не найден в выборе или диапазоне. Может быть одним из констант WdFindWrap.
Format Необязательный Variant Верно, что операция поиска находит форматирование в дополнение к тексту поиска или вместо него.
ReplaceWith Необязательный Variant Текст замены. Чтобы удалить текст, указанный аргументом Find, используйте пустую строку (""). Вы указываете специальные символы и расширенные критерии поиска так же, как и аргумент Find. Чтобы указать графический объект или другой нетекст в качестве замены, переместите элемент в буфер обмена и укажите "^c" для ReplaceWith.
Replace Необязательный Variant Указывает, сколько замен необходимо сделать: один, все или нет. Может быть любой константой WdReplace.
MatchKashida Необязательный Variant True, если поиск операций соответствует тексту с соответствием кашидам в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchDiacritics Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим диакритикам в языковом документе справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchAlefHamza Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим хамзам alef в документе на арабском языке. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchControl Необязательный Variant True, если поиск операций совпадает с текстом, соответствующим символам управления бидайрекционными в документе языка справа налево. Этот аргумент может быть недоступным для вас, в зависимости от языковой поддержки (например, английского языка США), выбранной или установленной.
MatchPrefix Необязательный Variant True, чтобы соответствовать словам, начиная со строки поиска. Соответствует префиксу Match в диалоговом окне Найти и заменить.
MatchSuffix Необязательный Variant True, чтобы соответствовать словам, завершаемой строкой поиска. Соответствует поле суффикса Match в диалоговом окне Найти и заменить.
MatchPhrase Необязательный Variant True игнорирует все символы белого пространства и управления между словами.
IgnoreSpace Необязательный Variant True игнорирует все пробелы между словами. Соответствует окне Игнорировать символы белого пространства в диалоговом окне Найти и заменить.
IgnorePunct Необязательный Variant True игнорирует все знаки препинания между словами. Соответствует контрольной окне Игнорировать пунктуацию в диалоговом окне Найти и заменить.

Возвращаемое значение

Примечания

Если MatchWildcards является true, можно указать символы подтекста и другие расширенные критерии поиска для аргумента FindText. Например, "*(ing)" находит любое слово, которое заканчивается в "ing".

Чтобы найти символ, введите caret (^), ноль (0), а затем код символа. Например, "^0151" соответствует em dash ( — ).

Если иное не указано, заменяющий текст наследует форматирование заменяемого в документе текста. Например, если заменить строку "abc" на "xyz", вхождения "abc" с жирным форматированием заменяются строкой "xyz" с жирным форматированием.

Кроме того, если MatchCase является false, вхождения верхнего текста поиска будут заменены на верхний шкаф версии заменяемого текста, независимо от случая замены текста. В предыдущем примере случаи "ABC" заменяются на XYZ.

Пример

В этом примере находит и выбирает следующее появление слова "библиотека".

В этом примере находятся все вхождения слова "привет" в активном документе и заменяется каждое событие на "привет".

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Рубрики

Свежие записи

Свежие комментарии

Архивы

1. Подключить нужные библиотеки
2. Открыть шаблон Word
3. Найти в нем нужное место
4. Вставить в него строку с информацией

1. Проект в студии у нас уже должен быть. В разделе Ссылки/References кликаем правой кнопкой, идем в "Добавить ссылку" и ищем Microsoft.Office.Interop.Word. В параметрах добавленной библиотеки ставим true в Копировать локально/Copy local, так как библиотеку надо копировать вместе с исполняемыми файлами проекта.

В код добавляем соответствующие using

2. Теперь вам предстоит провести много времени с замечательным интерфейсом Word, который представляет сам текстовый редактор и его потроха в виде разнообразных обьектов. Сейчас важны два - Application и Document. Переменные для них по ряду не очевидных причин лучше объявлять через интерфейсы.

Так же почти все функции Word требуют объектных параметров, даже если внутри них сидят простые строки и логические значения, так что лучше заранее сделать несколько оберток

Чтобы запустить Word и открыть в нем шаблон с диска (путь известен), потребуется примерно такой код

Принципиально важны два момента

1. Мы создаем неуправляемый ресурс, который не соберет сборщик мусора - отдельный процесс в памяти с приложением Word, если мы его не закроем и не выведем на экран, он так и останется там висеть до выключения компьютера. Более того такие ворды могут накапливаться незаметно для пользователя, программист-то еще прибьет их вручную. Заботиться о высвобождения неуправляемого ресурса должен программист.

2. По умолчанию Word запускается невидимым, на экран его выводим мы.

Для начала рассмотрим самый простой и примитивный вариант - поиск и замена строки в документе Word. Некоторые программисты так и работают - ставят в шаблон текстовую метку вроде @@nowDate и заменяют ее на нужное значение.

Пришло время познакомится с фундаментом работы с Word - великим и ужасным объектом Range. Его суть сложно описать словами -это некоторый произвольный кусок документа, диапазон (range), который может включать в себя все что угодно - от пары символов, до таблиц, закладок и прочих интересных вещей. Не стоит путать его с Selection - куском документа, выделенным мышкой, который само собой можно конвертировать в Range. Соотвественно нам надо получить Range для всего документа, найти нужную строку внутри него, получить Range для этой строки и уже внутри этого последнего диапазона заменить текст на требуемый. И не стоит забывать, что документ может иметь сложную структуру с колонтитулами и прочей ересью, возможный универсальный метод для замены всех вхождений данной строки:

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

Даже если нам надо найти (и например отформатировать) именно строку с текстом внутри документа, лучше всего выдать наружу найденный Range и уже с ним производить разные злодеяния. Получим примерно такой метод:

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

Если строку надо просто заменить, то сойдет простейшее

Но так как Range является универсальный контейнером для любого куска документа Word, то его возможности неизмеримо шире, часть их будет рассмотрена в дальнейших заметках.

Если нам надо просто встать в начало документа (и что-то вставить уже туда):

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

Представляет критерии для операции поиска.

Комментарии

Свойства и методы объекта Find соответствуют параметрам в диалоговом окне "найти и заменить".

Используйте свойство Find для возврата объекта Find .

Если вы получили объект Find из Selection объекта, выбор изменяется при обнаружении текста, удовлетворяющего условиям поиска.

Если вы получили объект Find из Range объекта, выделение не изменяется при обнаружении текста, совпадающего с критериями поиска, но объект Range переопределяется.

Свойства

Возвращает Application объект, представляющий приложение Microsoft Word.

Определяет, будет ли Microsoft Word автоматически корректировать окончания хангыль при замене текста хангыль.

Возвращает 32 — разрядное целое число, которое указывает приложение, в котором был создан указанный объект.

Возвращает или задает Font объект, представляющий форматирование символов указанного объекта.

Определите, включено ли форматирование в операцию поиска.

Определяет, будет ли операция поиска выполнять поиск вперед по документу.

Определяет, был ли найден поиск указанного объекта.

Возвращает Frame объект, представляющий форматирование рамки для указанного стиля или операции поиска и замены.

Возвращает или задает логическое значение , которое указывает, следует ли находить фонетические знаки хангыль и ханджа в операции поиска на корейском языке. Для чтения и записи.

Определяет, включено ли форматирование выделения в критерии поиска.

Возвращает или задает логическое значение , которое указывает, следует ли учитывать пунктуацию в найденном тексте при операции поиска. Для чтения и записи.

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

Возвращает или задает язык для указанного объекта.

Возвращает или задает восточно-азиатский язык для указанного объекта.

Возвращает или задает язык для указанного объекта.

Определяет, совпадают ли операции поиска с текстом с соответствующими алиф гамза в документе на арабском языке.

Определяет, будут ли найдены все формы искомого текста (например, если текст для поиска "Sit", "Кот" и "а").

Определяет, различается ли в Microsoft Word полноширинные и полуширинные буквы или символы.

Определяет, учитывается ли регистр в операции поиска.

Определяет, совпадают ли операции поиска с текстом с соответствующими двунаправленными символами управления в документе для языков с письмом справа налево.

Определяет, совпадают ли поисковые операции с текстом, совпадающим с диакритическими знаками в документе для языков с письмом справа налево.

Определяет, используются ли в Microsoft Word параметры неопределенного поиска для японского текста во время поиска.

Определяет, соответствуют ли операции поиска тексту с соответствующей кашиды в документе на арабском языке.

Значение true игнорирует все пробелы и управляющие символы между словами. Для чтения и записи.

Значение true , чтобы выделить слова, начинающиеся со строки поиска. Для чтения и записи.

Определяет, возвращаются ли в результате операции поиска слова, похожие на текст, который требуется найти.

Значение true , чтобы выделить слова, заканчивающиеся строкой поиска. Для чтения и записи.

Определяет, ищет ли операция поиска только слова целиком, а не текст, который является частью более длинного слова.

Определяет, содержит ли искомый текст подстановочные знаки.

Определяет, будет ли Microsoft Word находить или заменять текст, пропускаемый средством проверки правописания.

Возвращает или задает ParagraphFormat объект, представляющий параметры абзаца для указанного диапазона, операции выбора, поиска или замены или стиля.

Возвращает объект, представляющий родительский объект указанного объекта.

Возвращает Replacement объект, который содержит критерии для операции Replace.

Возвращает или задает стиль указанного объекта.

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

Возвращает или задает то, что происходит, если поиск начинается с точки, отличной от начала документа, и достигнут конец документа (или наоборот, если Forward задано значение false) или если искомый текст не найден в указанном фрагменте или диапазоне.

Методы

Удаляет все параметры неопределенного поиска, связанные с японским текстом.

Удаляет форматирование текста и абзацев из выделенного фрагмента или из форматирования, указанного в операции поиска или замены.

Удаляет выделение для всего текста, расположенного в операции поиска совпадений, и возвращает логическое значение , которое указывает, была ли операция выполнена успешно.

Выполняет указанную операцию поиска.

Выполняет указанную операцию поиска. Возвращает значение true , если операция поиска выполнена успешно.

Зарезервировано для внутреннего использования.

Выделяет все найденные совпадения и возвращает логическое значение , которое указывает, были ли найдены совпадения.

Включает все параметры неопределенных параметров поиска, связанные с японским текстом.

Читайте также: