Раскладка клавиатуры. Возвращаясь к напечатанному

Возвращаясь к напечатанному В Компьютерной газете 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, там вы найдете то, что вам нужно. В конце концов, выбор остается за Вами.

Напоследок хочу выразить надежду, что Александр Падерин не обидится на меня за критику.
Сергей Нематов


Компьютерная газета. Статья была опубликована в номере 50 за 1999 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета