Найти в Дзене
Широков Александр

Электронные таблицы: применяем с пользой (часть 10)

Оглавление

Транслитерация «по-индусски»

(описание используемых условных обозначений, а также список других публикаций канала по теме электронных таблиц, находится здесь).

Одна из предыдущих заметок этого раздела канала была посвящена созданию программы для транслитерации. В общей сложности для её реализации в формулах было использовано 9 разных функций табличного процессора. В двух других публикациях («Имитация игральной кости» и «Новая виртуальная игральная кость» в том же разделе) было продемонстрировано, что одна и та же задача в электронных таблицах может быть решена разными способами.

В свете сказанного можно задаться следующим вопросом: каково минимальное количество функций, с использованием которых в формулах осуществимо успешное выполнение замены в тексте русских букв латинскими? В качестве ответа предлагается описание процесса создания ещё одной версии программы для транслитерации, где будет задействовано всего две функции:

-2

ЕСЛИ( ; ; ) и ПСТР( ; ; ).

-3
-4

IF( ; ; ) и MID( ; ; ).

-5

Разумеется, с таким арсеналом средств не стоит ожидать от реализации «транслитератора» особой элегантности – он, например, не будет различать строчные и прописные буквы. Изложенное далее мне представляется уместным сравнить с компьютерной программой, написанной «индусским кодом», что и отражено в заголовке настоящей заметки.

Итак, начнём с того, что в листе электронной таблицы объединим диапазоны ячеек “B3:B12” и “D3:D12”:

-6

Затем в диапазоне “G1:AN2” нужно создать перечень символов-заменителей для каждой буквы русского алфавита:

-7

Примечание: на рисунке из-за установленной ширины ячеек не видно, что буква «щ» должна заменяться на комбинацию знаков “shch”:

-8
-9

LibreOffice Calc по умолчанию различает прописные и строчные буквы. Чтобы использовать приведённый выше перечень, следует отключить чувствительность к регистру: в программном меню выбрать команду «Сервис» → «Параметры...» и в появившемся диалоговом окне зайти в ветку “LibreOffice Calc” → «Вычисления», где в секции «Общие вычисления» снять флажок «Учитывать регистр»:

-10

Можно поступить иначе – оставить регистрочувствительность, но указать в перечне замен русские буквы сдвоенными, в виде пар «заглавная-строчная»:

-11

Далее будет показано, как действовать в случае выбора такого варианта.

-12

Теперь можно начинать поэтапную обработку текста, который будет вводиться в ячейку “B3”.

Этап 1. Разбивка фразы на отдельные символы

Заполните числами от 1 до 500 ячейки диапазона “F5:F504”:

-13

В ячейку “G5” введите формулу, вырезающую из исходного текста один символ:

-14

=ПСТР($B$3;F5;1)

-15
-16

=MID($B$3;F5;1)

-17

При помощи маркера заполнения её нужно размножить вниз, до ячейки “G504” включительно – из сказанного становится ясно, что программа будет способна проводить транслитерацию текста, длина которого не превышает 500 символов.

Этап 2. Выбор замены для русской буквы

-18

В ячейку “H5” введите формулу:

=ЕСЛИ($G5=H$1;H$2;"")

-19
-20

Если в настройках приложения чувствительность к регистру была отключена, то в ячейку “H5” нужно ввести следующую формулу:

=IF($G5=H$1;H$2;"")

Если же был выбран вариант со сдвоенными русскими буквами, то выражение в “H5” должно быть другим:

=IF($G5=MID(H$1;1;1);H$2;IF($G5=MID(H$1;2;1);H$2;""))

-21

Данную формулу при помощи маркера заполнения необходимо сначала размножить вправо, до ячейки “AN5”, а затем – вниз, вплоть до 504-й строки. В результате получится диапазон ячеек “H5:AN504”, в котором каждый символ обрабатываемого текста будет сравниваться с перечнем замени при наличии соответствия в ячейках этого диапазона отобразится нужный символ-заменитель, в других случаях ячейки останутся пустыми (содержащими пустую строку ""):

-22
-23

При работе со сдвоенными русскими буквами будет ещё сравниваться каждая из букв пары «заглавная-строчная» в перечне, из-за чего выражение формулы для этого случая более сложное.

-24

Этап 3. Подтверждение замены

В ячейке “AP5” необходимо сначала указать формулу вида:

=AO5&H5

Далее маркером заполнения её нужно размножить вправо, до ячейки “BV5” включительно, а после – вниз, до 504-й строки. В результате в ячейках столбца “BV” окажутся заменённые латинскими русские буквы. В случае символов, не подлежащих замене (цифры, знаки препинания и т. п.) ячейки в “BV” будут содержать пустую строку. Обратите также внимание на то, что в столбце “AO” ячейки обязательно должны быть пустыми!

В ячейку “BW5” надо ввести формулу

-25

=ЕСЛИ(BV5="";G5;BV5) ,

-26
-27

=IF(BV5="";G5;BV5) ,

-28

которую также следует размножить вниз до 504-й строки. Как нетрудно видеть, эта формула выдаёт либо заменённую на латинскую русскую букву, либо возвращает символ, который не нужно подвергать замене.

-29

Примечание: на рисунке в диапазоне “AP4:BV4” буквы русского алфавита проставлены для удобства контроля работы программы.

Этап 4. Сборка фразы

Для соединения всех символов воедино, в ячейку “BX5” нужно ввести формулу (ячейка “BX4” при этом должна быть пуста!):

=BX4&BW5

Если её размножить вниз до 504-й строки, то в ячейке “BX504” в результате постепенного «нанизывания» символов

-30

соберётся транслитерованная фраза, которую останется только отобразить в “D3” при помощи формулы:

=BX504

Выглядит результат работы программы следующим образом:

-31

Как видно, «транслитератор на двух функциях» получился вполне работоспособным. Несмотря на заметную ограниченность по возможностям (в сравнении с первой версией), он позволяет варьировать способы замены русских букв. Так, если в перечне замен для «ц» указать “c” вместо “ts”, то выглядеть результат обработки будет следующим образом:

-32

Файлы с примерами: xlsx / ods

Перечень публикаций на канале