![]() |
|
... Возвращаясь к напечатанному В Компьютерной газете N№ 47 от 30 ноября 1999 года была напечатана моя статья "Раскладка клавиатуры. Даешь сервис!". После этой статьи мне пришло несколько писем, одно из них я хотел бы рассмотреть в этой статье. (c) Компьютерная газета ![]() Борис Славин прислал макрос, скачанный им в Internet, c просьбой оценить его эффективность. Что я и делаю с удовольствием. Кто не помнит, что было в КГ N№47, может поискать этот номер и положить его перед собой. Автор макроса, как следует из прилагаемой ридмишки, Александр Падерин (paderin@mail.ru). Итак, приступим. Я опускаю объявление макроса и прочие тонкости и привожу его основной текст: Dim Alphabet Alphabet = "qwertyuiop[]asdfghjkl;'zxcvbnm,./<>" Dim Azbuka Azbuka = "йцукенгшщзхъфывапролджэячсмитьбю.БЮ" Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find For i = 1 To 35 Selection.Find.Text = Mid(Alphabet, i, 1) Selection.Find.Replacement.Text = Mid(Azbuka, i, 1) Selection.Find.Execute Replace:=wdReplaceAll Next i End With Вот, теперь можно сравнивать и анализировать. Что сразу бросается в глаза, так это разница в размерах. Предложенный макрос занимает порядка 15-ти строк, в то время как мой - порядка 70-ти. Это, конечно, минус, но порой маленький минус оборачивается огромным плюсом. Вся шутка в том, что принципиально различается способ обработки текста в макросах. Макрос Александра работает следующим образом: из массива Alphabet берутся по очереди символы и ищутся в выделенном фрагменте текста, если символ найден, он заменяется на новый из массива Azbuka. Таким образом, текст заменяется по одной букве, что и видно на экране во время выполнения макроса. Макрос, предложенный мной, берет выделенный кусок текста и обрабатывает его в памяти, строит виртуальную результирующую строку и только после этого выводит ее на экран. Вследствие этих основных различий (о мелких я не говорю) макрос Александра работает значительно медленнее. Для примера, на моем Pentium-II 350MHz текст из 1000 символов декодировался 2,9 секунды (а что же будет на Pentium или даже на 486-ом), в то время как мой макрос не показал в скорости абсолютно никакой задержки: и 10, и 1000 символов декодировались мгновенно. Остается подвести итог и сделать выводы. Итак, если Вы: - уверены, что заметите неправильную раскладку клавиатуры, набрав не более 10-20 символов; - вам лень набирать длинный макрос; - у Вас мощный компьютер; - Вы никогда никуда не торопитесь; - Вы редко забываете переключать раскладку клавиатуры, то Вам вполне подойдет макрос Александра Падерина. Когда будете набирать его, не забудьте добавить в начале "Sub no_english()", а в конце "End Sub". Ну, а если предложенные условия Вас не устраивают, то берите "Компьютерную газету" N№47, там вы найдете то, что вам нужно. В конце концов, выбор остается за Вами. Напоследок хочу выразить надежду, что Александр Падерин не обидится на меня за критику. Сергей Нематов © Компьютерная газета
|
|