|
Программирование поиска и замены
Word предлагает достаточно мощный механизм поиска и замены, оставить
который без внимания нельзя по двум причинам.
-
С одной стороны, эта часть текстовой обработки имеет весомое
практическое значение и позволяет существенно повысить
производительность труда при работе с большими документами.
-
С другой стороны, проектирование шаблонов поиска и замены имеет важное
учебное значение: ведь фактически речь идет о подстановочном
программировании, которое присуще таким языкам программирования, как
Лисп, Рефал, Пролог. Кроме того, подстановочное программирование
является важным и очень мощным инструментом текстовой обработки в
языках Perl, Java, JavaScript, Python (регулярные выражения).
Суть подстановочного программирования заключается в проектировании
цепочки предложений, каждое из которых состоит из двух частей:
образец1
замена1
...
образецN
заменаN
Интерпретатор кода последовательно просматривает строки, пытаясь
сопоставить входное выражение с образцом. При успешном сопоставлении
работает соответствующая замена. Если ни один образец не применим к
выражению, интерпретатор выдает аварийную остановку.
Пусть функция mul выполняет умножение двух своих аргументов.
Тогда функцию square, возводящую в квадрат, можно описать на
языке подстановок следующим образом:
square
{
(*) mul(\1,\1)
}
В подстановочных языках вместо цикла часто используется рекурсия. Вот
как, например, можно записать функцию, вычисляющую факториал входного
выражения (функция sub вычисляет разность своих аргументов):
fact
{
0 1
(*) mul(\1, fact(sub(\1,1))
}
Пусть, например, на вход функции fact поступает число
3. Первая строка не работает, вторая приводит к вычислению
mul(3, fact(2)).
Вычисление fact(2) дает выражение
mul(2, fact(1)).
Наконец, вычисление fact(1) приводит к результату
1 (работает первая строка в цепочке описанных замен).
Далее, как всегда, пружинит цепочка отложенных в рекурсии
вычислений, и на поверхность всплывает результат
6 (факториал от 3 равен 6).
Говоря о подстановочном программировании нельзя не упомянуть мощное,
гибкое и эффективное средство для текстовой обработки — регулярные выражения.
В основе этого механизма, которым снабжены такие современные языки
программирования, такие как Perl, Java, JavaScript, Python, лежит тот же
самый принцип построения шаблонов (моделей выражений), что и в
поисковой машине Word.
Построение шаблонов и правил преобразования выражений требует особого
склада ума (вероятно, вы это почувствовали на собственном опыте).
Это — новый стиль мышления, который отличается от стиля,
формируемого классическим программированием. Значит, знакомство детей с
этой темой в раннем возрасте принесет им не только инструментальную
пользу (при работе с Word), но и подготовит к более комфортному
восприятию подстановочных алгоритмов в будущем.
В курсе Азов подробное знакомство с подстановочным языком
программирования состоится в книге 7 Черные ящики. В этой
книге дети сначала будут отгадывать готовые алгоритмы исполнителя, а
затем программировать свои собственные, используя подстановочные идеи и
правила.
Подстановочные знаки Word
В Читальном зале описана лишь небольшая часть подстановочных знаков
Word. Ниже приводится более полный перечень.
Эта информация может оказаться полезной для работы самого учителя.
Возможно, какие-то знаки и приемы он будет использовать на занятиях с
детьми в дополнение к материалу Читального зала.
Знак |
Что обозначает |
Пример строки поиска |
Что будет найдено |
? |
Один любой символ. |
к?т |
кот кит к т |
* |
Любое число любых символов (в том числе и ноль символов). |
к*т |
кот кит к т кт комнат конец от казал себе, чт |
[ ] |
Один из указанных знаков. |
к[ои]т |
кот кит |
[ - ] |
Один символ из диапазона (в порядке возрастания кодов). |
[0-9] |
Любая цифра. |
[а-яё] |
Любая строчная русская буква. |
[А-ЯЁ] |
Любая прописная русская буква. |
[a-z] |
Любая строчная латинская буква. |
[0-9a-z] |
Любая цифра или строчная латинская буква. |
[.0-9,] |
Любая цифра, точка или запятая. |
[! ] |
Один любой символ, но не указанный после знака восклицания. |
к[!ои]т |
кат кут к т (но не кот и не кит) |
[!0-9] |
Не цифра. |
[!a-z] |
Не строчная латинская буква. |
[!a-zA-Z] |
Не латинская буква. |
[!1a-z] |
Не строчная латинская буква и не цифра 1. |
[!0-9f] |
Все кроме цифры и буквы f. |
{n} |
Ровно n штук предыдущего символа или выражения. |
10{3} |
1000 |
(10){3} |
101010 |
[0-9]{3} |
Три любых цифры. |
[!0-9]{3} |
Три любых не цифры. |
(f[0-9]){3} |
Например, f1f5f9 |
{n;} |
n и более штук предыдущего символа или выражения. |
10{3;} |
1000 10000 100000 ... |
(10){3;} |
101010 10101010 ... |
[0-9]{3;} |
Три и более цифры. |
[!0-9]{3} |
Три и более не цифры. |
{n;m} |
От n до m штук предыдущего символа или выражения. |
10{3;5} |
1000 10000 100000 |
(10){3;4} |
101010 10101010 |
[0-9]{3;10} |
От трех до десяти цифр. |
[!0-9]{3;10} |
От трех до десяти не цифр. |
@ |
Ноль и более штук предыдущего символа или выражения. |
10@ |
1 10 100 ... |
(10)@ |
пусто 10 1010 ... |
[0-9]@ |
Ноль или более цифр. |
[!0-9]@ |
Ноль или более не цифр. |
< |
Начало слова. |
<рак |
ракета ракушка но не барак |
> |
Конец слова. |
рак> |
барак мрак но не ракета |
Пример 1
Удалить все лишние пробелы в документе (пробел в примере имитируется
знаком подчеркивания):
Строка поиска |
Строка замены |
Комментарий |
_{2;} |
_ |
Два и более пробелов заменяются одним пробелом. |
Пример 2
Отделить абзацы друг от друга пустыми строками.
Строка поиска |
Строка замены |
Комментарий |
([!^0013]^0013) ([!^0013]) |
\1^0013\2 |
Вставка пустого абзаца между теми абзацами, где его не было. |
В шаблонах поиска и замены использован код символа конца абзаца
^0013. Код символа можно помещать в шаблоны как при
включенном режиме Подстановочные знаки, так и при
выключенном. Формат записи символа с кодом nnn имеет вид:
^0nnn
Пример 3
Удаление пустых строк в документе.
Строка поиска |
Строка замены |
Комментарий |
(^0013){2;} |
\1 |
Удаляются пустые абзацы. |
Пример 4
В тексте некоторые десятичные дроби набраны с запятой, некоторые с
точкой. Заменить десятичную запятую десятичной точкой.
Строка поиска |
Строка замены |
Комментарий |
(<[0-9]@),([0-9]@>) |
\1.\2 |
Заметьте, что правильно будут обработаны и дроби, которые начинаются или заканчиваются десятичной запятой. |
Практикум
Файлы, необходимые для выполнения заданий практикума (пес.doc,
элли.doc, иван.doc, числа.doc, марс.doc) находятся в каталоге
.\write\work\unit12\
Как всегда, рекомендуется перед работой переместить эти файлы
в папку Мои документы.
Зачетный класс
Перед решением Зачётного класса, рекомендуется провести
разбор задач (одну-две задачи решает учитель, остальные —
дети) по программированию поиска и замены.
Учитель легко может придумать большое число упражнений, взяв за основу
задания Зачетного класса и приведенные ниже примеры.
Тестировать решения лучше всего при помощи поисковой машины Word. С
одной стороны, это позволит обнаружить трудные ошибки. С
другой — приучит детей к диагностическим сообщениям
интерпретатора, которые пишутся хотя и на русском языке, но излагаются
не всегда понятно, а ошибку фиксируют не всегда точно.
Особое внимание уделите символу пробела. Пробел, как и любой другой
символ, имеет собственный двоичный код, при помощи которого
записывается в память редактора. Пробел — это не отсутствие
каких либо знаков.
Задачи на поиск
В режиме Подстановочные знаки задан образец поиска. Что
будет найдено?
Строка поиска |
Ответ |
? |
Каждый символ текста. |
* |
Любой набор символов или их отсутствие. |
1? |
Два символа, первый из которых цифра 1, например,
10,
1а,
1?.
Ответ 1 был бы неверным: подстановочный знак
? не может обозначать отсутствие символов, но вполне может
соответствовать пробелу или символу конца абзаца.
|
1* |
Символ 1 и любая цепочка символов, которая
начинается с единицы, например,
10,
1а,
1999 год.
Подстановочный знак * обозначает
любую цепочку символов, в том числе и нулевой длины (отсутствие символов).
|
?? |
Два любых символа, например,
ах,
10,
3".
Неверные ответы: 1, ах!, 3.5".
|
?а?а |
Верные ответы:
мама,
рама,
Саша,
лапа.
Неверные ответы:
Марина,
аша,
аа.
|
?а*а |
Верные ответы:
даа,
мама,
рама,
Саша,
Марина,
пар клубился в воздухе тогда,
наверху у отца.
Неверные ответы:
да,
аша,
аа.
|
Задачи на замену
Замена выполняется в режиме Подстановочные знаки.
Запишите ее результат.
Строка поиска |
Строка замены |
Найдено |
Результат замены |
1(?)2 |
\112 |
102 |
012 |
1(*)2 |
\112 |
13482 |
34812 |
1(?)(?) |
\2\135 |
156 |
6535 |
1(*)(?) |
\2\135 |
16 |
635 |
(?)(?)(?) |
\3\2\1 |
кот |
ток |
(?)(*)(?) |
\3\2\1 |
ад |
да |
Ответы на вопросы
-
Как выполнить операцию Поиск в текстовом редакторе Word?
Ответ.
- Установить курсор на начало текста.
- Открыть окно Найти и заменить.
- Задать образец в строке поиска.
- Нажимать кнопку Найти далее.
-
Какие способы открытия окна Найти и заменить вам известны?
Ответ.
- Выбрать пункт Найти
в меню Правка.
- Выбрать пункт Заменить
в меню Правка.
- Нажать на кнопку
на панели инструментов.
- Выполнить аккорд Ctrl+F (или Ctrl+H).
-
Что такое образец поиска?
Ответ.
Образец поиска — это фрагмент текста, который записывается в
строке поиска (окно Найти и заменить).
-
Попробуйте описать алгоритм, по которому Word выполняет поиск.
Ответ.
Word просматривает текст, пока не находит в нём фрагмент,
соответствующий образцу поиска. Если флажки Подстановочные
знаки и Только слово целиком выключены, а флажок
Учитывать регистр включен, то речь идет о буквальном
совпадении. Продолжение поиска выполняется кнопкой Найти
далее.
-
Как правильно составить образец для поиска нескольких слов,
имеющих общую часть?
Ответ.
В качестве образца поиска нужно записать общую часть. Например,
для поиска слов клавиатура и клавиша
нужно написать в строке поиска образец клави.
-
Как правильно составить образец для поиска слова, в точном написании
которого нет полной уверенности?
Ответ.
Можно попробовать поиск с той частью слова, в написании
которой уверенности больше. Например, если вы не знаете, как пишется
слово собака, попробуйте поискать фрагмент бака.
Если слово собака нужно во всех падежах, то лучше использовать
образец бак. Конечно, при этом будет найдено много лишнего.
-
Как правильно составить образец для поиска существительного во всех
падежах?
Ответ.
В качестве образца нужно взять основу слова (слово без падежного
окончания). Например, образец коров поможет найти корову во
всех падежах.
-
Расскажите алгоритм выполнения операции Замена в текстовом
редакторе Word.
Ответ.
- Установить курсор на начало текста.
- Открыть окно Найти и заменить.
- Задать строку поиска.
- Задать строку замены.
- Произвести замену в пошаговом или автоматическом режиме.
-
Как выполнять замену в пошаговом режиме (с проверкой правильности
замены для каждого случая)?
Ответ.
Нужно повторять следующую последовательность действий:
- Нажать кнопку Найти далее.
- Если найден нужный фрагмент нажать кнопку Заменить.
-
Как выполнять замену в автоматическом режиме (сразу для всего текста,
без контроля отдельных замен)?
Ответ.
Нужно нажать кнопку Заменить все.
-
В тексте всюду нужно заменить корову на быка.
Можно ли это сделать при помощи таких указаний:
Строка поиска |
Строка замены |
корова |
бык |
Ответ.
Нет. Будут выполнены замены только для слова корова
в именительном падеже.
-
Какие настройки можно выполнить в окне Найти и заменить?
Ответ.
- В меню Направление можно выбрать направление поиска
(вперед, назад, везде).
- Установить флажок Учитывать регистр (слова
кот и Кот будут считаться разными).
- Установить флажок Только слово целиком (при образце
поиска бак слово бакен найдено не будет).
- Установить флажок Подстановочные знаки (в строках
поисках и замены можно использовать специальные знаки, такие как
?, * и другие).
-
Что означает флажок Учитывать регистр?
Ответ.
Если флажок установлен, то строчные и прописные буквы считаются разными,
в противном случае они не различаются.
-
Что означает флажок Только слово целиком?
Ответ.
Если флажок установлен, то образец ищется как отдельное слово.
Слова, в которые образец входит как составная часть, будут пропущены.
-
Что означает флажок Подстановочные знаки?
Ответ.
В режиме Подстановочные знаки за некоторыми символами
закрепляется специальное служебное значение. Например, в обычном режиме
образец 1*2 приведет к поиску только фрагмента
1*2. В режиме Подстановочные знаки будут
найдены фрагменты 12, 132, 1 корова, а
быка 2 и любые другие, которые начинаются с цифры 1, а
заканчиваются цифрой 2.
-
Что обозначает подстановочный знак ??
Ответ.
Любой один символ, в том числе пробел и конец абзаца.
-
Что обозначает подстановочный знак *?
Ответ.
Любое число символов (в том числе и ни одного).
-
Что обозначают подстановочные знаки []?
Ответ.
Любой один символ из того набора, который указан в квадратных скобках.
-
Что обозначают подстановочные знаки [!]?
Ответ.
Любой один символ, кроме тех, которые указаны за знаком !
в квадратных скобках.
-
Что такое выражение и как оно задаётся в строке поиска?
Ответ.
Выражение — это фрагмент образца, заключенный в круглые
скобки.
-
Сколько выражений можно использовать в строке поиска?
Ответ.
Девять.
-
Как использовать выражение из строки поиска в строке замены?
Ответ.
Выражениям в строке поиска Word присваивает номера (от 1 до 9) в
порядке их следования слева направо. В строке замены выражения из
строки поиска записываются при помощи двух символов \n, где
\ — служебный знак, а n — порядковый
номер выражения в строке поиска.
Примеры.
Строка поиска |
Строка замены |
Найдено |
Результат замены |
(??)ра(кан) |
с\1\2 |
таракан |
стакан |
(?)(???)* |
\2и\1 |
кузнец |
узник |
*(ри)(ца) |
\2\1\2 |
курица |
царица |
(1?2)0(3?4) |
8\2\19 |
1520364 |
83641529 |
|