Click to visit RITlabs and download The Bat! onto your computer макросы в   The Bat!

на русском языке

Автоматическое склонение дней / месяцев
Превращение времени отправки письма на часовую зону отправителя

(Летущую Мышь можно найти на ее собственной странице)

index
английски русски немецки словацки чешски

1)   Как устроить, чтобы Бат автоматически вставил в ответ слова «во вторник, в среду, в субботу», время в часовой зоне корреспондента, на которого письмо я отвечаю, и т.д.? – шаблоны Александра В. Киселева

2)   Как устроить, чтобы Бат автоматически вставил в ответ слова «во вторник, в среду, в субботу», время в часовой зоне корреспондента, на которого письмо я отвечаю, и т.д.? – шаблоны A.P.$lasH

3)   Что такое макрос %IF и как он работает?

4)   Как заставить Бат-а сравнивать часовую зону моего корреспондента с моей собственной часовой зоной?

5)   Как автоматически вставить в эдитор Бат-а привет в зависимости от времени дня, когда пишем письмо?


1)   Как устроить, чтобы Бат автоматически вставил в ответ слова «во вторник, в среду, в субботу», время в часовой зоне корреспондента, на которого письмо я отвечаю, и т.д.?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   Alexander V. Kiselev <akiselev@mph.phys.spbu.ru>
Кому:   The Bat! list <thebat@yahoogroups.com>
Kогда:   21 августа 2001 в 21:42:10 (GMT +0400)
Что:   Продолжение извращений с Date:, или еще один привет Слэшу:-)
--====----====----====----====----====----====----====----====----====----===--
Аюшки вам!

Таки вот, подправленные (спасибо Лене) по сравнению с прошлой ночью версии того
же самого (на сей раз приаттачены, потому как надоело мне отвечать на вопросы
«Пааачумууу не работает?!!!» после того, как какой-то мерзкий SMTP решил строки
перенести по дороге:-)), плюс еще несколько версий для любителей поизвращаться.
Прошу, как говорится, любить и жаловать:-) Объяснение? Да вот же оно:

1.     Всё, что пристегнуто – это быстрые шаблоны (а не то, что вы подумали:-))

2.     Вызывать их надо так:

%QInclude="date_rus" (или date_rus_m, или date_rus_full, или date_rus_full_m,
или date_eng, или, наконец, date_eng_full). Остальные три – это базы данных для
них, какие из них нужны для какого – о том смотри ниже.

Теперь по пунктам:

A.   date_rus нуждается в datebase. В наиболее навороченном варианте выдает что-то
вроде:

В воскресенье, 19 августа 2001 года, в 23:54:24 GMT +0300
  (понедельник, 20.08.2001, 0:54 в Питере),
В случае, когда не требуется (с его точки зрения:-)) выдавать день недели
и/или время написания, не выдает их, получается что-то вроде (в минимальном
варианте):
Во вторник, 21 августа 2001 года, в 04:10:29 GMT +0400,
или (в «среднем» варианте):
В воскресенье, 19 августа 2001 года, в 19:52:03 GMT +0300
  (20:52 того же дня в Питере),
В общем, вы поняли. Ниже (для других шаблонов) в целях экономии места привожу
только «самый полный» вариант срабатывания.

B.   date_rus_m нуждается в datebase. Выдает что-то типа:

В воскресенье, девятнадцатого августа 2001 года, в 23:54:24 GMT +0300
  (понедельник, 20.08.2001, 0:54 в Питере),
C.   date_rus_full нуждается в datebase и datebase_full (sic! особенности
великого и могучего, однако...) Выдает что-то типа:

В воскресенье, 19 августа 2001 года, в 23:54:24 GMT +0300
  (понедельник, 20 августа 2001 года, 0:54 в Питере),
D.   date_rus_full_m нуждается в datebase и datebase_full (sic!!!). Выдает
что-то типа:

В воскресенье, девятнадцатого августа 2001 года, в 23:54:24 GMT +0300
  (понедельник, двадцатое августа 2001 года, 0:54 в Питере),
(ну вы поняли, это он и есть, привет Слэшу:-))

И теперь пара английских шаблончиков (а вдруг кому понадобятся?:-)):

E.   date_eng нуждается в datebase_eng. Выдает что-то типа:

On Sunday, August 19, 2001, at 23:54:24 GMT +0300
  (Monday, August 20, 2001, at 0:54 my local time),
F.   date_eng_full нуждается в datebase_eng. Выдает (а вы что себе думали?:-)):

On Sunday, the 19th of August, 2001, at 23:54:24 GMT +0300
  (Monday, the 20th of August, 2001, at 0:54 my local time),

Вот такие вот пирожки с яйцами:-)

Ну и стандартное пожелание: буде кто этим всем добром, полностью аль частично,
да возжелает воспользоваться и (паче чаяния:-)) обретет проблем, да не
стесняется сообщать о сем прискорбном факте мне (лично:-)), да не забудет
приложить ко своей челобитной полное описание своих затруднений.

HTH;-)

-- 
С уважением, Александр
---
http://mph.phys.spbu.ru/~akiselev
используется: The Bat! 1.53bis под Windows 95 build 1111 B
железо: iC333A на Acorp6BX86, 160M PC100, S3 3D (AGP), IBM 13.6G
---
PGP DH/DSS public key on keyservers:
0x214135A2; F/P: A677 81C9 48CF 16D1 B589 9D33 E7D5 675F 2141 35A2

---

[(Note by Avenarius:) Although the date in English may have the form “the 19th of August” when spoken, it is not standard to convey it this way in writing. The preferred usage seems to be “19 August 2001” in British usage or “August 19, 2001” in American usage. Return to commentary]

Назад


2)   Как устроить, чтобы Бат автоматически вставил в ответ слова «во вторник, в среду, в субботу», время в часовой зоне корреспондента, на которого письмо я отвечаю, и т.д.?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   A.P.$lasH <ap-slash@tfs.kiev.ua>
Кому:   Roman Polyak <thebat@yahoogroups.com>
Когда:   26 июля 2001 в 13:17:46 (GMT +0300)
Что:   Re[2]: Fwd: Новые русские макросы
--====----====----====----====----====----====----====----====----====----===--
В четверг, 26-го июля 2001, примерно в 14:37:46 (GMT +0700),
когда ходики отправителя показывали 10:37 (четверг),
Роман Поляк изволил сообщить:


A>> Благодаря очень хитрым quick templates от Januk Agarwall
RP> А где эти хитрости взять?

Так ведь Авенариус их к письму приаттачил. Вы разве не заметили?
У меня в активе только украинский, русский и английский, так что
дословно переводить – людей смешить.

В частности, я (стыдно мне, стыдно) так и не понял, что такое
диакритика и с чем ее пьют, так что показываю то, что понятно и без
знаний языка:

1.     Основной (я его немного изменил) шаблон ответа, который необходимо
поставить либо в адресную книгу, либо в свойства папки, либо в
параметры почтового ящика

Обратите внимание на то, что в самом начале письма В%QINCLUDE="den"
пишется неразрывно. Это важно.
[В следующем словацкие названия шаблонов изменены русскими названиями. – ред.]

==8<===============Начало основного шаблона===========================
В%QINCLUDE="den", %QINCLUDE="cislo"-го %QINCLUDE="mesiac" %-
%QINCLUDE="god", примерно в %QINCLUDE="vremia",
когда ходики отправителя показывали %OTIME (%ODOW),
%ABTONAME="%OFROMNAME" изволил%-
%IF:"%ABOFROMGENDER"="1":"":"%IF:'%ABOFROMGENDER'='2':'а':'(а)'" %-
сообщить:

%CURSOR
%QUOTES
-- 
Будьте здоровы,
 %FromFName                          mailto:%FromAddr
===8<===============Конец основного шаблона===========================

2.     Набор вспомогательных шаблонов, которые нужно добавить в набор
быстрых шаблонов (диалог по комбинации Ctrl+Shift+Q).

Время
===8<==============Начало шаблона "vremia"===============================
%SETPATTREGEXP="(?m-s)Date\:\s*?((.*?[\d]{4})\s*?([\d]{0,2}\:%-
[\d]{0,2}\:[\d]{0,2})\s*?(.*))"%REGEXPBLINDMATCH="%HEADERS"%-
%SUBPATT="3" (GMT%SUBPATT="4")
===8<==============Конец шаблона "vremia"================================

Число
===8<==============Начало шаблона "cislo"=============================
%SETPATTREGEXP="^Date\:.*?\,\s*(\d*)"%-
%REGEXPMATCH="%HEADERS".
===8<==============Конец шаблона "cislo"==============================

Day
===8<==============Начало шаблона "day"===============================
%SETPATTREGEXP="^Date\:\s*(...)"%-
%REGEXPMATCH="%HEADERS"%-
===8<==============Конец шаблона "day"================================

Month
===8<==============Начало шаблона "month"=============================
%SETPATTREGEXP="^Date\:.*?\,[\s\d]*(\S*)"%-
%REGEXPMATCH="%HEADERS"
===8<==============Конец шаблона "month"==============================

Год
===8<==============Начало шаблона "god"===============================
%SETPATTREGEXP="^Date\:.*?(\d{4})"%-
%REGEXPMATCH="%Headers"
===8<==============Конец шаблона "god"================================

День
===8<==============Начало шаблона "den"===============================
%REM="День отправки письма"%-
%IF:"%QINCLUDE=""day"""="Mon":" понедельник":""%-
%IF:"%QINCLUDE=""day"""="Tue":"о вторник":""%-
%IF:"%QINCLUDE=""day"""="Wed":" среду":""%-
%IF:"%QINCLUDE=""day"""="Thu":" четверг":""%-
%IF:"%QINCLUDE=""day"""="Fri":" пятницу":""%-
%IF:"%QINCLUDE=""day"""="Sat":" субботу":""%-
%IF:"%QINCLUDE=""day"""="Sun":" воскресенье":""%-
===8<==============Конец шаблона "den"================================

Месяц
===8<==============Начало шаблона "mesiac"============================
%REM="Месяц отправки письма"%-
%IF:"%QINCLUDE=""month"""="Jan":"января":""%-
%IF:"%QINCLUDE=""month"""="Feb":"февраля":""%-
%IF:"%QINCLUDE=""month"""="Mar":"марта":""%-
%IF:"%QINCLUDE=""month"""="Apr":"апреля":""%-
%IF:"%QINCLUDE=""month"""="May":"мая":""%-
%IF:"%QINCLUDE=""month"""="Jun":"июня":""%-
%IF:"%QINCLUDE=""month"""="Jul":"июля":""%-
%IF:"%QINCLUDE=""month"""="Aug":"августа":""%-
%IF:"%QINCLUDE=""month"""="Sep":"сентября":""%-
%IF:"%QINCLUDE=""month"""="Oct":"октября":""%-
%IF:"%QINCLUDE=""month"""="Nov":"ноября":""%-
%IF:"%QINCLUDE=""month"""="Dec":"декабря":""%-
===8<==============Конец шаблона "mesiac"=============================

Результат – в этом письме, оно было создано с помощью именно этого
шаблона.

----------------------------------------------------------------------

Что добавил я:

1.     Стандартную подстановку – если адресат есть в адресной книге,
имя и фамилию шаблон возьмет именно из нее.

2.     Проверку на то, кто же нам пишет – парень, девушка или бесполое
чудовище. В зависимости от результата пишем
«Сообщил, сообщила или сообщил(а)».

Пол берем из адресной книги. Если адресат в ней не указан, пишем
неопределенное «Сообщил(а)» и лезем исправлять/добавлять. :)

3.     После числа убрал точку (зачем она там?) и поставил (-го).

----------------------------------------------------------------------

А механизм работы шаблонов простой до гениальности...

1.     Макросы vremia, cislo, day, month, god осуществляют парсинг даты
создания письма.
   Date: Thu, 26 Jul 2001 14:37:46 +0700

   vremia  –  время        –  14:37:46 и +0700
   cislo   –  число        –  26
   day     –  день недели  –  Thu
   month   –  месяц        –  Jul
   god     –  год          –  2001
2.     Макросы den и mesiac произносят результат красиво.
   den     – о вторник
   mesiac  – июля
Именно поэтому конструкцию В%QINCLUDE="den" нужно писать слитно,
чтобы у вас получилось «Во вторник», а не «В о вторник».


Вот такие вот дела.

Надеюсь, Авенариус нас не оставит и объяснит всё остальное. :)

-- 
Будьте здоровы,
A.P.$lasH mailto:ap-slash@tfs.kiev.ua

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   A.P.$lasH <ap-slash@tfs.kiev.ua>
Кому:   A.P.$lasH <thebat@yahoogroups.com>
Когда:   26 июля 2001 в 16:45:58 (GMT +0300)
Что:   Re[3]: Fwd: Новые русские макросы
--====----====----====----====----====----====----====----====----====----===--
В четверг, 26-го июля 2001, примерно в 13:17:46 (GMT +0300),
когда ходики показывали 13:17 (четверг),
A.P.$lasH изволил сообщить:

==8<===============Начало основного шаблона===========================
В%QINCLUDE="den", %QINCLUDE="datum"-го %QINCLUDE="mesiac" %-
%QINCLUDE="rok", примерно в %QINCLUDE="cas",
когда ходики отправителя показывали %OTIME (%ODOW),
%ABTONAME="%OFROMNAME" изволил%-
%IF:"%ABOFROMGENDER"="1":"":"%IF:'%ABOFROMGENDER'='2':'а':'(а)'"
%- сообщить:

Надеюсь, последнее уточнение... Для конференции конструкция вида
%ABTONAME="%OFROMNAME" не подходит, так как в результате получим не
ap-slash@tfs.kiev.ua, а thebat@yahoogroups.com.

Таким образом, в шаблоне следует заменить %ABTONAME="%OFROMNAME" на
%ABOFROMNAME="%OFROMNAME". Фсё...

-- 
UID: A.P.$lasH
MUA: The Bat! v1.54 Beta/4
EML: ap-slash@tfs.kiev.ua

Назад


3)   Что такое макрос %IF и как он работает?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   A.P.$lasH <ap-slash@tfs.kiev.ua>
Кому:   Andrew Perevodchik <thebat@yahoogroups.com>
Когда:   26 июля 2001 в 23:55:02 (GMT +0300)
Что:   Re[2]: Новые русские макросы
--====----====----====----====----====----====----====----====----====----===--
* В четверг, 26-го июля 2001, примерно в 16:38:56 (GMT +0300),
* когда мои часы показывали 16:38:56 (четверг),
* Андрей Переводчик изволил сообщить:


APl>>> %IF:"%QINCLUDE=""month"""="Jan":"января":""

AP> А расскажите в общем, как %IF работает. А то куча кавычек –
AP> непонятно что к чему.


ОБЩИЙ ВИД
%IF:"Var1"оператор_сравнения"Var2":"Then":"Else"
----------------------------------------------------------------------
Var1 и Var2        – переменные, которые необходимо сравнить

Оператор сравнения – > Больше, < Меньше = Равно, ...

Then               – Текст, который будет вставлен в шаблон в том
                     случае, если выражение верно, т.е.,

                           Var1 оператор Var2 = TRUE

Else               – Текст, который будет вставлен в шаблон в том
                     случае, если выражение неверно.

                     Вместо Else можно поставить еще один IF.
Все переменные заключены в кавычки. Варианты подстановки текста
разделяются символом ":".

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

В НАШЕМ КОНКРЕТНОМ СЛУЧАЕ

%IF:"%QINCLUDE=""month"""="Jan":"января":""
----------------------------------------------------------------------
В роли Var1 Янук использует результат работы быстрого шаблона month
                      %QINCLUDE=""month"".
Шаблон возвращает некий текст (в данном случае, название месяца),
которое извлекается им из поля Date, расположенного в заголовке
письма.

Две кавычки ставим, чтобы Бат не принял первую из них за закрывающую
кавычку переменной Var1.

В роли второй переменной – слово «Jan». Таким образом, мы проверяем,
возвращает ли этот быстрый шаблон текст «Jan».
             ЕСЛИ (Результат работы шаблона) = Jan
В роли Then выступает текст «января», т.е.
 ЕСЛИ (Результат шаблона) = Jan ТОГДА (Вставить в текст слово Января)
А переменная Else пустует. Соответственно, имеем:
 ЕСЛИ (Результат) = Jan ТОГДА (Января) ИНАЧЕ (Оставить текст в покое)
----------------------------------------------------------------------

Так понятно? Или совсем запутал? :)

-- 
UID: A.P.$lasH
MUA: The Bat! v1.54 Beta/4
EML: ap-slash@tfs.kiev.ua

Назад


4)   Как заставить Бат-а сравнивать часовую зону моего корреспондента с моей собственной часовой зоной?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   A.P.$lasH <ap-slash@tfs.kiev.ua>
Кому:   Avenarius <thebat@yahoogroups.com>
Когда:   27 июля 2001 в 10:02:26 (GMT +0300)
Что:   Re[2]: Fwd: Новые русские макросы
--====----====----====----====----====----====----====----====----====----===--
* В пятницу, 27-го июля 2001, примерно в 05:44:34 (GMT +0200),
* когда мои часы показывали 6:44:34 (пятница),
* Авенариус изволил сообщить:


A> если макрос %QINCLUDE="vremia" идентичный как макрос %OTIMELONG, тогда вместо
A> макроса %OTIME покажи слова «то же самое» или что-нибудь подобного.


1.     Обрезаем шаблон vremia до такого вот состояния -
     %SETPATTREGEXP="(?m-s)Date\:\s*?((.*?[\d]{4})\s*?([\d]{0,2}\:%-
     [\d]{0,2}\:[\d]{0,2})\s*?(.*))"%REGEXPBLINDMATCH="%HEADERS"%SUBPATT="3"
и называем его t-vremia.

2.     Дополняем «шапку» основного шаблона таким образом:
     * В%QINCLUDE="den", %QINCLUDE="cislo"-го %QINCLUDE="mesiac" %-
     %QINCLUDE="god", примерно в %QINCLUDE="vremia",
     * %IF:"%QINCLUDE=""t-vremia"""="%OTIME=""hh:mm:ss""":"Кстати говоря, мои часы %-
     ничем в этом плане не отличались":"когда мои часы показывали %OTIMELONG (%ODOW)",
Забавно... У меня работает. Это нужно отметить. :)

A> A.P.$lasH, может быть, Вы когда-нибудь подумаете...? ;-))

:) Вы правы, мне иногда подумать не помешает. :)

-- 
UID: A.P.$lasH
MUA: The Bat! v1.54 Beta/4
EML: ap-slash@tfs.kiev.ua

Назад


5)   Как автоматически вставить в эдитор Бат-а привет в зависимости от времени дня, когда пишем письмо?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
От:   A.P.$lasH <ap-slash@tfs.kiev.ua>
Кому:   Novo V.T.I. Agency <thebat@yahoogroups.com>
Когда:   31 июля 2001 в 10:48:48 (GMT +0300)
Что:   Re[9]: Fwd: Новые русские макросы
--====----====----====----====----====----====----====----====----====----===--
* Тридцать первого июля 2001 года, в 09:23:52 (GMT +0400),
* когда часы у нас на Крещатике показывали 08:23:52 (GMT +0300),
* во вторник утром Вадим изволил сообщить:


NVTIA> Шаблон такой, но до 1000 от пишет «evening», а потом все ОК

Ничего удивительного.

1.   Время представлено в виде строк, т.е. «8:00»,«9:00»,«17:00»,«5:00».
2.   Сравнивая время, Мышь на самом деле сравнивает его строковое
представление, а принцип сравнения строк элементарен – сравнение
идет посимвольно.

Чем это грозит? А смотрите сами:
   (1)     Сравним 17:00 и 20:00

       Первый символ с строке "17:00", это символ "1"
       Первый символ с строке "20:00", это символ "2"

       1<2? Ага. Соответственно, 17:00<20:00

   (2)     Сравним 18:00 и 10:00

       Первый символ с строке "18:00", это символ "1"
       Первый символ с строке "10:00", это символ "1"

       1<1? Нет. 1>1? Нет. 1=1? Да. Переходим ко второму символу

       Второй символ с строке "18:00", это символ "8"
       Второй символ с строке "10:00", это символ "0"

       8<0? Нет. 8=0? Нет. 8>0? Да. Соответственно, 18:00>10:00
В вашем случае ошибки не происходит, все дело в этом самом принципе
сравнения. При установленном у вас формате представления даты, у чисел
меньше десяти в начале отсутствует лидирующий ноль. И что в итоге?
   (1)     Сравним 8:00 и 12:00

       Первый символ с строке "8:00", это символ "8"
       Первый символ с строке "12:00", это символ "1"

       8>1? Ага. Соответственно, 8:00>12:00

       А как правильно? А вол так:

   (2)     Сравним 08:00 и 12:00

       Первый символ с строке "08:00", это символ "0"
       Первый символ с строке "12:00", это символ "1"

       0<1? Ага. Соответственно, 08:00<12:00
      
Чтобы этого избежать, можно воспользоваться средствами последних
версий Мышки, которые позволяют явно указывать формат времени и даты.

Предлагаю вот такой вот шаблон
[улучшенную версию этого шаблона можно найти здесь – ред.]:
Good %-
%IF:"%TIME='hh:mm:ss'">"06:00:00":"%IF:'%TIME=""hh:mm:ss""'<'11:59:59':'morning':''"%-
%IF:"%TIME='hh:mm:ss'">"11:59:59":"%IF:'%TIME=""hh:mm:ss""'<'17:59:59':'afternoon':''"%-
%IF:"%TIME='hh:mm:ss'">"17:59:59":"%IF:'%TIME=""hh:mm:ss""'<'23:59:59':'evening':''"%-
%IF:"%TIME='hh:mm:ss'">"00:00:00":"%IF:'%TIME=""hh:mm:ss""'<'05:59:59':'night':''"%-
%IF:"%TIME='hh:mm:ss'"="00:00:00":"night":""%-
-- 
UID: A.P.$lasH
MUA: The Bat! v1.54 Beta/4
EML: ap-slash@tfs.kiev.ua

Назад


английски русски немецки словацки чешски
index

Первоначальное предложение макросов и шаблонов: Januk Aggarwal
Русские версии: A.P.$lasH и Alexander V. Kiselev


Если у Вас вопросы по поводу этих макросов и шаблонов, пишите на один из этих трех адресов:
akiselev@mph.phys.spbu.ru , ap-slash@tfs.kiev.ua или a@avenarius.sk (webmaster).

  Последняя актуализация:
24 августа 2001 (TB! версия 1.54 Beta/7)
Посетите Книгу Цитат Авенариуса home counter