Представьте, что вы только что ввели свое имя и пароль для входа на web-сайт своего любимого магазина. На следующей странице, которую вы увидите, может быть, например, такой текст:
Добро пожаловать. Джейн!
Мы надеемся, что никто из членов семьи Паблик не забывает напоминать своим соседям по улице Мзпл Стрит покупать товары у нас!
Как всегда, мы направим Ваш заказ по адресу Мисс Джейн К. Паблик 600 Мзпл Стрит Касл Рок, штат Айова 12345
Как программист, вы должны понимать, что за всем этим стоит компьютер, который использует ваше имя (имя пользователя) для обращения к базе данных и получает оттуда сведения в форме:
Паблик|Джейн|К|Мисс|600|Мэпл Стрит|Касл Рок|Айова112345
Но каким же именно образом программа формирует страницу специально для вас? Не очень ленивый программист мог бы написать программу таким образом:
read lastname, firstname, init, title, streetnum. streetname. town, state, zip
print "Добро пожаловать, ”, firstname, print "Мы надеемся, что никто из " print “членов семьи ", lastname," не забывает" print "напоминать своим соседям "
print ”по улице ”, streetname. ’’ покупать товары у нас," print "Как всегда, мы направим Ваш заказ по адресу" print " ", title, firstname, init, ” ". lastname print ” ", streetnum. streetname print " ”, town, “ ,”, state, zip
Такая программа напрашивается сама собой, но ее написание несколько утомляет. Более элегантный подход состоит в использовании генератора писем по шаблонам, который обрабатывает шаблоны наподобие следующего:
Добро пожаловать, $1!
Мы надеемся, что никто из членов семьи $0 не забывает напоминать своим соседям по улице $5 покупать товары у нас!
Как всегда, мы направим Ваш заказ по адресу $3 $1 $2 $0 $4 $5 $6. $7 $8
Запись $i обозначает i-e поле записи. При этом $0 соответствует фамилии покупателя и т. д. Форма обрабатывается приведенным ниже псевдокодом, который предполагает, что для вывода символа $ нужно ввести: $$.
read fields from database
/* считать значения полей из базы данных */
loop from start to end of schema
/* цикл от начала до конца шаблона */
с = next character of schema /* следующий символ шаблона */ if с ' = ' $'
pnntchar с /* вывод символа с */
el se
с = next character of schema /* следующий символ шаблона */ case с of
' $ ’ printchar ’$ ’
'O' - ’9' pnntstnng fleld[c]
default: error("bad schema") /* ошибка некорректный шаблон*/ |