Рубрика «Секреты Вим». Преобразования

Рубрика Привет, коллеги!

Сегодня я расскажу вам о том, как в мире программирования и редакторов текста можно превратить скучные цифры из унылого набора символов в настоящие произведения искусства — ну или хотя бы красиво отформатированные таблички. Представьте себе: вы сидите, пьёте кофе (или что покрепче), а перед вами стоит задача — преобразовать число из одной формы в другую. Звучит как магия?

В некотором роде так оно и есть! В программировании это волшебство зовётся форматированным выводом, и если вы думали, что printf — это просто страшное слово из уроков по C, то вы глубоко ошибаетесь.

Printf — это такая функция, которая берёт ваши данные и вставляет их в заранее приготовленные “полочки” (их называют полями), причём делает это с таким шиком, что даже строгий бухгалтер позавидует.

Например, у вас есть шестнадцатеричное число, и вы хотите показать его в десятичном виде — пожалуйста! Или наоборот: хотите добавить ноликов слева, чтобы число выглядело как номер секретного агента 007? Нет проблем!

Функция printf умеет делать всё это и даже больше.

В редакторе Vim тоже есть printf — правда, без красных ковров и фанфар. Но зато с возможностью конвертировать числа между системами счисления так легко, что даже ваша бабушка могла бы научиться этим пользоваться (если бы только не боялась компьютеров). Поля начинаются с процента — да-да, тот самый символ %, который любят все программисты за свою универсальность.

Например, %s подставит строку: представьте себе табличку с именами ваших коллег. Если имя короткое — printf добавит пробелы справа до нужной длины (%6S), чтобы все выглядело аккуратно. А если у вас кириллица или другие многобайтные символы?

Не беда! %6s позаботится о байтах так же хорошо, как мама заботится о вас.

Но бывает и весело: например, %.9S обрежет строку до 9 символов ровно. Это как если бы вы на корпоративе решили не давать никому слишком длинные имена на бейджиках — мол, пусть будет кратко и по делу!

А вот для чисел есть свои приёмы: %d выведет целое число десятичное (все любят десятичную систему после того случая с двоичным кодом на экзамене), %05d добавит нули слева. Помните анекдот про программиста: «Почему ты всегда носишь пять нулей слева?» – «Это мой стиль!» Вот примерно так работает этот формат.

Для тех же кто любит загадки посложнее — есть %x и %X для шестнадцатеричных чисел (с заглавными буквами!), %#X добавит префикс 0X – чтобы никто не сомневался: «это именно ХЕХ». А любители восьмеричной системы могут использовать %o (с решёткой будет 0 перед числом) – потому что иногда хочется почувствовать себя старым добрым UNIX-шником.

А вот вещественные числа оживляются через %f – например 42.666 или %.3f для трёх знаков после запятой.

Есть ещё экспоненциальная форма (%e/%E) – идеальна для тех случаев когда надо показать «научный стиль» вашего числа; типа “Вот вам 6.66e42 – звучит внушительно!” И если хотите оставить выбор за Vim’ом — используйте %g или %G; он сам решит каким образом лучше показать число.

Конечно же нельзя забывать про %% – это просто знак процента. Потому что иногда хочется сказать “100%” без всяких сложностей.

А теперь представьте ситуацию: у вас куча чисел в тексте вида “12.3”, “7.89”, “1234.5678”, а нужно их все округлить до двух знаков после запятой или дополнить нулями там где мало цифр… И тут printf приходит на помощь!

Он может пробежаться по всему тексту и сделать всё автоматически; словно волшебник с метлой в руках вместо палочки.