Форматирование текста сообщения для телеграм-бота
Создан телеграм-бот, который по запросу отправляет определенные данные из гугл-таблицы. Сообщение собирается и форматируется так:
text += 'Конверсия: ' + sheet.getRange("B3").getDisplayValue() + ' | ' + '<i>' + sheet.getRange("C3").getDisplayValue() + '</i>\n';
text += 'Лиды:' + ' ' + sheet.getRange("B4").getDisplayValue() + ' | ' + sheet.getRange("C4").getDisplayValue() + '\n';
text += 'Сделки:' + ' ' + sheet.getRange("B5").getDisplayValue() + ' | ' + sheet.getRange("C5").getDisplayValue() + '\n';
text += 'Выручка:' + ' ' + sheet.getRange("B6").getDisplayValue() + ' | ' + sheet.getRange("C6").getDisplayValue() + '\n';
Подскажите, пожалуйста, как исправить код, чтобы в тексте сообщения числа всегда были по правому краю вне зависимости от количества символов? Примерно как на картинке
Ответы (1 шт):
Автор решения: Yuri Khristich
→ Ссылка
Алгоритм достаточно простой.
- Допустим каждая строка состоит из трех частей, слева направо:
txt,spaces,num. - Допустим шрифт моноширинный и известно максимальное число букв в строке
max.
Нужно посчитать количество пробелов перед тем как формировать строку.
- Переводим цифры в текст и узнаем количество символов:
len = num.toString().length - Складываем полученное число с длинной текста:
len = txt.length + len - Вычитаем эту сумму из длинны строки:
len = max - len - Формируем пробельный элемент:
spaces = ' '.repeat(len)
Одним словом:
var spaces = max - (num.toString().length + txt.length)
Дальше формируем строку: text + spaces + num
Это можно реализовать в виде вспомогательной функции и использовать в цикле формирующем таблицу. Примерно так:
const max = 25;
const txts = ['наличными', 'по карте', 'aванс'];
const nums = ['100', '0', '25'];
var table = '';
function get_line(txt, num, max) {
var spaces = max - (num.toString().length + txt.length);
return txt + ' '.repeat(spaces) + num + '\n';
}
for (let i=0; i<txts.length; i++) table += get_line(txts[i], nums[i], max);
console.log(table);
Результат:
наличными 100
по карте 0
aванс 25