Немножко программирования
Немножко программирования
Честно скажу, так мило смотреть современные фильмы "про хакеров". В каком бы стиле их не снимали, а получается прекрасная развлекательная комедия о крутых ребятах и о жутко хитроумных вирусах, выгрызающих в экранном интерфейсе дыры, которые должны символизировать собой разрушение самых неприступных систем сетевой защиты. После подобных лент хакеры кажутся современными колдунами или шаманами, спящими днем и творящими свои таинственные заклинания при слабом мерцании четырнадцатидюймового монитора. Не хватает лишь колыхающегося пламени факелов и старого черепа в роли чернильницы. Естественно, при подобном реквизите любой человек, владеющий парой - тройкой команд на любом языке, выглядит всемогущим обладателем тайных знаний огромной разрушительной силы.
Так вот, я хочу сказать по большому секрету, что программирование, оно, конечно, сродни большому искусству и требует таланта, однако программирование программированию рознь. Конечно, возвести дворец Тюильри без высоко квалифицированного и, несомненно, талантливого архитектора было бы затруднительно, однако возвести хороший домик на дачном участке можно с успехом и своими силами. На самом деле, программирование - чрезвычайно широкая область, включающая в себя и написание операционной системы, и простенькой программы в рамках одной книги электронных таблиц. Кстати говоря, в тех же электронных таблицах с помощью программ можно получить огромную пользу и экономию рабочего времени, а при некоторой сообразительности и даже минимальном желании на них можно вообще переложить массу повседневных задач (за исключением разве что ввода первичных данных с клавиатуры).
Полагаю, не сделаю для вас открытия, если скажу, что даже в благополучной Америке средний уровень навыков рядового пользователя персонального компьютера не отличается от аналогичного показателя в нашей стране. Разница заключается лишь в том, что американцы несколько менее боязненно относятся к вычислительной технике, только и всего. В остальном мы похожи. Отсюда напрашивается два очевидных вывода: первый - в мире слишком много всяких задач, требующих использования уникальных программ, второй - в том же мире ощущается недостаток высококлассных программистов. Правда, стоит признать, что выдающийся чеканщик никогда не станет молотобойцем. В переводе на нормальный русский сие означает, что специалист-системщик просто не станет писать простенькие программульки, даже если они являются для него плевым делом. По этому разработчики прикладного программного обеспечения просто не могли не предложить клиентам какого-нибудь решения. Как говорится, свято место пусто не бывает.
Анализ пользовательских решений показал, что в подавляющем большинстве случаев обычный человек стремится автоматизировать не просто некое уникальное действие, а лишь то, которое приходится повторять часто. К примеру, приходится каждый божий день выполнять такую последовательность: открыть конкретный файл, выделить все его содержимое, выбрать конкретный шрифт, выбрать конкретное представление чисел в ячейках и сохранить результат под тем же именем в некотором, заранее определенном месте. Фактически, каждый из описанных этапов выполняется посредством стандартных, уже имеющихся механизмов, и нет нужды в особом использовании широких возможностей какого-нибудь языка программирования. Достаточно написать простой набор инструкций, повторяющих ручные манипуляции, а с этим и компьютер может справиться. Так родилось понятие "макроса" или "макро команды", то есть некоторого общего распоряжения, понятного прикладной программе и уже изначально реализованного в ней.
Если говорить конкретно, то такая операция, как, например, выделение всего содержимого листа таблицы Microsoft Excel, на самом деле состоит из массы элементарных операций. Однако внешне вы говорите программе " выделить все" и даже не задумываетесь над всеми этими премудростями. Так вот, " выделить все" и является примером элементарной макрокоманды.
Далее я расскажу, как составлять макросы и пользоваться ими на простом примере. Не поручусь, что придуманная мною ситуация столь уж злободневна, в таких программах, как Microsoft Excel, трудно придумать конечное количество решений, ибо их великое множество. В русском алфавите всего тридцать две буквы, однако это не мешает и по сей день придумывать новые слова. Посему куда рациональнее рассматривать основные принципы функционирования макросов вообще, а уж потом вы сами сможете разобраться, когда и как их применять.
Вот давайте и будем от этого плясать. Предположим, что вы ежедневно получаете длиннющие таблицы. Масса фактического материала, но совершенно никак не отформатированного и потому плохо воспринимаемого взглядом. Вообще-то, привести ее к должному виду совершенно несложно. В пять - шесть приемов посредством имеющихся инструментов таблица превратится в конфетку, только через месяц такой работы и праведник взвоет. А между тем, простенький макрос вполне в состоянии заменить вас с куда более быстрым и не менее эффективным результатом.
Собственно говоря, особо ничего делать и не надо, просто требуется запустить макрорекордер (а попросту говоря, встроенный магнитофон операций) и перевести ваши действия в алгоритм макроязыка. Это несложно.
В меню "СЕРВИС" есть режим "МАКРОС", имеющий выпадающий список возможных действий . Редактор Visual Basic, который там есть, нас интересует мало. Мы же не собираемся действительно писать программы. Во всяком случае - с самого первого раза. Вообще говоря, лучше сразу включить рекордер. Это делается командой "НАЧАТЬ ЗАПИСЬ". Только не забывайте, что с того момента, как рекордер заработает, он начнет записывать ВСЕ ваши действия. Так что, если вы не хотите потом действительно разбираться в программировании и редактировать полученный макрос вручную, то сначала обдумайте все свои действия и лишь потом включайте запись.
Запись макроса начинается с того, что Microsoft Excel просит заполнить своего рода визитную карточку, позволяющую потом его идентифицировать, если понадобится . Первое поле требует ввести какое-нибудь осмысленное имя, можно вводить любое, в том числе и по-русски, однако желательно все же пользоваться только латиницей, так как некоторые режимы, использующие макросы, русского не понимают. Далее визитная карточка предлагает привязать будущий макрос к какой-нибудь комбинации клавиш, если хотите, конечно, ибо этого можно и не делать. Потом следует казать, где конкретно должен храниться этот макрос. По умолчанию он будет записан в текущую книгу, что в общем-то правильно. Однако если вы намерены использовать предполагаемую программу в любой книге электронных таблиц, то в выпадающем меню стоит выбрать " Новая книга" или " Личная книга макросов", в зависимости от ситуации. Ну и последнее, в самом нижнем поле Microsoft Excel автоматически записывает имя составителя макроса и дату его создания.
Как только вы со всем этим справитесь и нажмете "ОК", автоматически запустится рекордер, который станет "конспектировать" все ваши действия до его остановки. Внешне это проявится в виде временной инструментальной панельки, возникшей на рабочей области окна таблицы . Панель содержит всего две кнопки: "СТОП" (полагаю, ее назначение понятно) и "ОТНОСИТЕЛЬНЫЕ ССЫЛКИ". О последней следует сказать особо. Дело в том, что обычно Microsoft Excel генерирует адреса и ссылки в относительной форме, то есть взять то, что лежит в ячейке, которая на столько-то шагов выше (или ниже) и на столько-то шагов правее (или левее). При составлении макроса подобное зачастую неправильно, так как вы обычно хотите обработать нечто конкретное и четко обозначенное. Поэтому макрорекордер, по умолчанию, все ссылки и адреса запоминает в абсолютной форме, то есть, вместо "пойди туда, сам не знаю куда", прописываются строго определенные значения. Это следует учитывать при составлении макросов.
Так вот, теперь, когда "тишина в студии" настала, пора выполнить те действия, которые впоследствии вы желаете переложить на плечи персонального компьютера. В данном случае - определить для конкретных полей конкретные параметры форматирования. Например, всю первую строку имеет смысл выделить мышью ("кликнуть" по ее номеру), а потом, через меню "ФОРМАТ" или горячие клавиши (без разницы), определить, что заголовки столбцов должны выравниваться по центру. Если дополнительно поочередно "кликнуть" мышью по правой границе каждого из заполненных столбцов, то они к тому же будут автоматически растянуты по ширине хранящихся в них данных. Потом можно выделить по очереди каждый из столбцов и определить дополнительные форматы. Например, столбец " Количество" должен представлять числа с двумя десятичными разрядами после запятой, столбцы " Цена" и " Стоимость" - иметь обозначения денежных единиц после цифр. Если хотите, можете придумать что-то еще, в зависимости от конкретной ситуации и вашей фантазии.
Когда все манипуляции закончены и делать больше нечего, то самое время остановить запись нажатием уже описанной кнопки "СТОП" на инструментальной панели макрорекордера, после чего она исчезнет и запись остановится. Кстати, если в процессе записи вы хотите отвлечься, временно остановиться или передвинуть временную инструментальную панель макрорекордера в новое место, то делайте сие смело. Перемещение панели макросом не фиксируется, к тому же он не записывает ваше бездействие, так как его забота - проделанные операции, а не время между их использованием.
Ну вот, теперь макрос готов. Если вы откроете окно макросов посредством команд системного меню "СЕРВИС/МАКРОС/МАКРОСЫ" или нажмете комбинацию "Alt + F8", то обнаружите, что там есть макрос с тем именем, которое вы только что придумали . Я не менял имя, назначаемое Microsoft Excel по умолчанию, так что в моем случае в списке числится " Макрос1".
В дальнейшем, когда понадобится перелопатить электронную таблицу так, как я только что это сделал, вместо ручных операций можно открыть исходный файл, а потом описанным в предыдущем абзаце способом активизировать список макросов и выбрать нужный. После выделения он активизируется либо двойным "кликом", либо экранной кнопкой " ВЫПОЛНИТЬ".
Только имейте в виду, что макрос - это строго определенная последовательность конкретных команд. Если она составлена с помощью макрорекордера, то алгоритм успешно сработает исключительно только тогда, когда будет запущен в точно таких же условиях, в которых его писали. В моем примере достаточно добавить лишний столбец или поменять местами уже имеющиеся, или добавить снизу строку " Итого", чтобы только что составленный макрос напортачил. В первом случае он отформатирует только первые пять столбцов (ибо так уж он был составлен) и проигнорирует остальные (даже если в них тоже будет что-то записано), а в остальных двух случаях макрос применит неверный формат, что вообще может закончиться сообщением об ошибке. Таким образом, перед началом записи своих действий стоит подумать над их последовательностью с тем, чтобы получившийся макрос действительно сработал правильно. Компьютер лишь тем отличается от человека, что не думает над тем, что он делает, а строго выполняет полученный набор команд. Таким образом, если он где-то ошибся, то это означает, что где-то не досмотрел автор, писавший данную программу. Зато если автор оказывается прав, то его программы становятся прекрасным подспорьем, делающим эту жизнь красивой и приятной.
Александр Запольскис
E-mail: leshy@nestor.minsk.by - титульная страница
Честно скажу, так мило смотреть современные фильмы "про хакеров". В каком бы стиле их не снимали, а получается прекрасная развлекательная комедия о крутых ребятах и о жутко хитроумных вирусах, выгрызающих в экранном интерфейсе дыры, которые должны символизировать собой разрушение самых неприступных систем сетевой защиты. После подобных лент хакеры кажутся современными колдунами или шаманами, спящими днем и творящими свои таинственные заклинания при слабом мерцании четырнадцатидюймового монитора. Не хватает лишь колыхающегося пламени факелов и старого черепа в роли чернильницы. Естественно, при подобном реквизите любой человек, владеющий парой - тройкой команд на любом языке, выглядит всемогущим обладателем тайных знаний огромной разрушительной силы.
Так вот, я хочу сказать по большому секрету, что программирование, оно, конечно, сродни большому искусству и требует таланта, однако программирование программированию рознь. Конечно, возвести дворец Тюильри без высоко квалифицированного и, несомненно, талантливого архитектора было бы затруднительно, однако возвести хороший домик на дачном участке можно с успехом и своими силами. На самом деле, программирование - чрезвычайно широкая область, включающая в себя и написание операционной системы, и простенькой программы в рамках одной книги электронных таблиц. Кстати говоря, в тех же электронных таблицах с помощью программ можно получить огромную пользу и экономию рабочего времени, а при некоторой сообразительности и даже минимальном желании на них можно вообще переложить массу повседневных задач (за исключением разве что ввода первичных данных с клавиатуры).
Полагаю, не сделаю для вас открытия, если скажу, что даже в благополучной Америке средний уровень навыков рядового пользователя персонального компьютера не отличается от аналогичного показателя в нашей стране. Разница заключается лишь в том, что американцы несколько менее боязненно относятся к вычислительной технике, только и всего. В остальном мы похожи. Отсюда напрашивается два очевидных вывода: первый - в мире слишком много всяких задач, требующих использования уникальных программ, второй - в том же мире ощущается недостаток высококлассных программистов. Правда, стоит признать, что выдающийся чеканщик никогда не станет молотобойцем. В переводе на нормальный русский сие означает, что специалист-системщик просто не станет писать простенькие программульки, даже если они являются для него плевым делом. По этому разработчики прикладного программного обеспечения просто не могли не предложить клиентам какого-нибудь решения. Как говорится, свято место пусто не бывает.
Анализ пользовательских решений показал, что в подавляющем большинстве случаев обычный человек стремится автоматизировать не просто некое уникальное действие, а лишь то, которое приходится повторять часто. К примеру, приходится каждый божий день выполнять такую последовательность: открыть конкретный файл, выделить все его содержимое, выбрать конкретный шрифт, выбрать конкретное представление чисел в ячейках и сохранить результат под тем же именем в некотором, заранее определенном месте. Фактически, каждый из описанных этапов выполняется посредством стандартных, уже имеющихся механизмов, и нет нужды в особом использовании широких возможностей какого-нибудь языка программирования. Достаточно написать простой набор инструкций, повторяющих ручные манипуляции, а с этим и компьютер может справиться. Так родилось понятие "макроса" или "макро команды", то есть некоторого общего распоряжения, понятного прикладной программе и уже изначально реализованного в ней.
Если говорить конкретно, то такая операция, как, например, выделение всего содержимого листа таблицы Microsoft Excel, на самом деле состоит из массы элементарных операций. Однако внешне вы говорите программе " выделить все" и даже не задумываетесь над всеми этими премудростями. Так вот, " выделить все" и является примером элементарной макрокоманды.
Далее я расскажу, как составлять макросы и пользоваться ими на простом примере. Не поручусь, что придуманная мною ситуация столь уж злободневна, в таких программах, как Microsoft Excel, трудно придумать конечное количество решений, ибо их великое множество. В русском алфавите всего тридцать две буквы, однако это не мешает и по сей день придумывать новые слова. Посему куда рациональнее рассматривать основные принципы функционирования макросов вообще, а уж потом вы сами сможете разобраться, когда и как их применять.
Вот давайте и будем от этого плясать. Предположим, что вы ежедневно получаете длиннющие таблицы. Масса фактического материала, но совершенно никак не отформатированного и потому плохо воспринимаемого взглядом. Вообще-то, привести ее к должному виду совершенно несложно. В пять - шесть приемов посредством имеющихся инструментов таблица превратится в конфетку, только через месяц такой работы и праведник взвоет. А между тем, простенький макрос вполне в состоянии заменить вас с куда более быстрым и не менее эффективным результатом.
Собственно говоря, особо ничего делать и не надо, просто требуется запустить макрорекордер (а попросту говоря, встроенный магнитофон операций) и перевести ваши действия в алгоритм макроязыка. Это несложно.
В меню "СЕРВИС" есть режим "МАКРОС", имеющий выпадающий список возможных действий . Редактор Visual Basic, который там есть, нас интересует мало. Мы же не собираемся действительно писать программы. Во всяком случае - с самого первого раза. Вообще говоря, лучше сразу включить рекордер. Это делается командой "НАЧАТЬ ЗАПИСЬ". Только не забывайте, что с того момента, как рекордер заработает, он начнет записывать ВСЕ ваши действия. Так что, если вы не хотите потом действительно разбираться в программировании и редактировать полученный макрос вручную, то сначала обдумайте все свои действия и лишь потом включайте запись.
Запись макроса начинается с того, что Microsoft Excel просит заполнить своего рода визитную карточку, позволяющую потом его идентифицировать, если понадобится . Первое поле требует ввести какое-нибудь осмысленное имя, можно вводить любое, в том числе и по-русски, однако желательно все же пользоваться только латиницей, так как некоторые режимы, использующие макросы, русского не понимают. Далее визитная карточка предлагает привязать будущий макрос к какой-нибудь комбинации клавиш, если хотите, конечно, ибо этого можно и не делать. Потом следует казать, где конкретно должен храниться этот макрос. По умолчанию он будет записан в текущую книгу, что в общем-то правильно. Однако если вы намерены использовать предполагаемую программу в любой книге электронных таблиц, то в выпадающем меню стоит выбрать " Новая книга" или " Личная книга макросов", в зависимости от ситуации. Ну и последнее, в самом нижнем поле Microsoft Excel автоматически записывает имя составителя макроса и дату его создания.
Как только вы со всем этим справитесь и нажмете "ОК", автоматически запустится рекордер, который станет "конспектировать" все ваши действия до его остановки. Внешне это проявится в виде временной инструментальной панельки, возникшей на рабочей области окна таблицы . Панель содержит всего две кнопки: "СТОП" (полагаю, ее назначение понятно) и "ОТНОСИТЕЛЬНЫЕ ССЫЛКИ". О последней следует сказать особо. Дело в том, что обычно Microsoft Excel генерирует адреса и ссылки в относительной форме, то есть взять то, что лежит в ячейке, которая на столько-то шагов выше (или ниже) и на столько-то шагов правее (или левее). При составлении макроса подобное зачастую неправильно, так как вы обычно хотите обработать нечто конкретное и четко обозначенное. Поэтому макрорекордер, по умолчанию, все ссылки и адреса запоминает в абсолютной форме, то есть, вместо "пойди туда, сам не знаю куда", прописываются строго определенные значения. Это следует учитывать при составлении макросов.
Так вот, теперь, когда "тишина в студии" настала, пора выполнить те действия, которые впоследствии вы желаете переложить на плечи персонального компьютера. В данном случае - определить для конкретных полей конкретные параметры форматирования. Например, всю первую строку имеет смысл выделить мышью ("кликнуть" по ее номеру), а потом, через меню "ФОРМАТ" или горячие клавиши (без разницы), определить, что заголовки столбцов должны выравниваться по центру. Если дополнительно поочередно "кликнуть" мышью по правой границе каждого из заполненных столбцов, то они к тому же будут автоматически растянуты по ширине хранящихся в них данных. Потом можно выделить по очереди каждый из столбцов и определить дополнительные форматы. Например, столбец " Количество" должен представлять числа с двумя десятичными разрядами после запятой, столбцы " Цена" и " Стоимость" - иметь обозначения денежных единиц после цифр. Если хотите, можете придумать что-то еще, в зависимости от конкретной ситуации и вашей фантазии.
Когда все манипуляции закончены и делать больше нечего, то самое время остановить запись нажатием уже описанной кнопки "СТОП" на инструментальной панели макрорекордера, после чего она исчезнет и запись остановится. Кстати, если в процессе записи вы хотите отвлечься, временно остановиться или передвинуть временную инструментальную панель макрорекордера в новое место, то делайте сие смело. Перемещение панели макросом не фиксируется, к тому же он не записывает ваше бездействие, так как его забота - проделанные операции, а не время между их использованием.
Ну вот, теперь макрос готов. Если вы откроете окно макросов посредством команд системного меню "СЕРВИС/МАКРОС/МАКРОСЫ" или нажмете комбинацию "Alt + F8", то обнаружите, что там есть макрос с тем именем, которое вы только что придумали . Я не менял имя, назначаемое Microsoft Excel по умолчанию, так что в моем случае в списке числится " Макрос1".
В дальнейшем, когда понадобится перелопатить электронную таблицу так, как я только что это сделал, вместо ручных операций можно открыть исходный файл, а потом описанным в предыдущем абзаце способом активизировать список макросов и выбрать нужный. После выделения он активизируется либо двойным "кликом", либо экранной кнопкой " ВЫПОЛНИТЬ".
Только имейте в виду, что макрос - это строго определенная последовательность конкретных команд. Если она составлена с помощью макрорекордера, то алгоритм успешно сработает исключительно только тогда, когда будет запущен в точно таких же условиях, в которых его писали. В моем примере достаточно добавить лишний столбец или поменять местами уже имеющиеся, или добавить снизу строку " Итого", чтобы только что составленный макрос напортачил. В первом случае он отформатирует только первые пять столбцов (ибо так уж он был составлен) и проигнорирует остальные (даже если в них тоже будет что-то записано), а в остальных двух случаях макрос применит неверный формат, что вообще может закончиться сообщением об ошибке. Таким образом, перед началом записи своих действий стоит подумать над их последовательностью с тем, чтобы получившийся макрос действительно сработал правильно. Компьютер лишь тем отличается от человека, что не думает над тем, что он делает, а строго выполняет полученный набор команд. Таким образом, если он где-то ошибся, то это означает, что где-то не досмотрел автор, писавший данную программу. Зато если автор оказывается прав, то его программы становятся прекрасным подспорьем, делающим эту жизнь красивой и приятной.
Александр Запольскис
E-mail: leshy@nestor.minsk.by - титульная страница
Компьютерная газета. Статья была опубликована в номере 31 за 1998 год в рубрике soft :: субд