БлогNot. "Настоящие" таблицы в псевдографике Юникода

"Настоящие" таблицы в псевдографике Юникода

В этой вот заметке я с помощью PHP просто выравнивал текст по столбцам, плюс предполагая, что работа выполняется с однобайтовыми символами.

Сегодня мне понадобились рамки как в старой доброй псевдографике DOS, только для кодировки Юникода UTF-8. По ссылке уже есть таблица с нужными символами (или вот эта рамочница в английской Вики).

Класс Tabber очень прост в обращении - достаточно передать конструктору двумерный массив с данными и номер рамки (от 0 до 4, по умолчанию 1). Потом вызываем метод get(), который вернёт всю таблицу, отформатированную и заключённую в тег <pre> (если шрифт не моноширинный, разумеется, всё "разъедется"):

$data = [
 [ -1, 2, 3, 4 ],
 [ 5, 6, 7 ],
 [],
 [9,10]
];
$tab = new Tabber ($data,1);
echo $tab->get();

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

Ширина столбцов определяется автоматически исходя из данных. Строки с разным количеством столбцов также не должны смущать класс.

Пришлось также написать собственную функцию str_pad, работающую с символами Юникода, стандартная делать это отказалась. Функция называется str_pad_unicode, другими данными класса она не пользуется, поэтому легко "достаётся" из его листинга.

Поскольку мне не хочется "портить" символы рамок, в ленте исходник не прикрепляю, но его можно скачать по ссылке:

 Класс Tabber и пример использования, папка с проектом PHP уже создана внутри архива .zip (2 Кб)

Помните, что файл нужно открывать в кодировке Юникода utf-8, и не в Блокноте, как любые листинги PHP. Также можно выполнить пример в работе. Версия PHP нужна не ниже 5.4, я проверял в 5.5.9 из Denwer.

В "Андроиде", похоже, криво - возможно, там размер пробела в моноширинном тексте из тега <pre> не равен ширине символа.

09.11.2019, 13:41 [1706 просмотров]


теги: textprocessing программирование php форматы dos

К этой статье пока нет комментариев, Ваш будет первым