powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf() utf8 + выравнивание по ширине
54 сообщений из 54, показаны все 3 страниц
printf() utf8 + выравнивание по ширине
    #39982151
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неожиданно, но по совершенно понятным причинам, перестало работать выравнивание по ширине.

Код: plaintext
1.
2.
3.
    std::setlocale(LC_ALL, "");
    char str[77] = {};
    sprintf(str, "%6s", u8"ыфz");



На стековерфлоу ( здесь и здесь ) советуют:

- Костыли.
- Преобразовывать в utf-16.

Неужели нет нормального выхода?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982211
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Составные символы останутся составными в любой кодировке. Следовательно, то, что вы называете костылями.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982223
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Составные символы останутся составными в любой кодировке. Следовательно, то, что вы называете костылями.

Но если мы делаем аля setlocale("utf8"), то printf() мог бы это учитывать?

А так да -- wchar_t тут не полное решение. Нам нужно строку и формат преобразовать в UC-32, а после printf_uc32() преобразовывать обратно.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982231
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, так прикрути padding пробелов ручками и обрежь через substr! Делов-то... Возможно, в printf пока что неустранённый баг, к которому надо прикрутить workaround.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982237
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, так прикрути padding пробелов ручками и обрежь через substr! Делов-то... Возможно, в printf пока что неустранённый баг, к которому надо прикрутить workaround.

Код: plaintext
1.
sprintf("%12s %*s %16s %5s", u8"ыы", 35, u8"фф", getMyStr(), u8"яяячч");


Как вы себе представляете workaround вокруг printf()?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982244
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Как вы себе представляете workaround вокруг printf()?
А в чём проблема? Пишем функцию дополнения пробелами до нужного размера исходя из кол-ва символов, возвращающую std::string и в вызов sprintf вставляем эту функцию, в которую передаём литерал и длину поля, в которое этот литерал надо вписать, а в самом sprintf используем лишь "%s" без выкрутасов.

Единственная проблема - составные символы, которые могут состоять из двух символов юникода, но выглядеть одним глифом.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982258
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Как вы себе представляете workaround вокруг printf()?
А в чём проблема? Пишем функцию дополнения пробелами до нужного размера исходя из кол-ва символов, возвращающую std::string и в вызов sprintf вставляем эту функцию, в которую передаём литерал и длину поля, в которое этот литерал надо вписать, а в самом sprintf используем лишь "%s" без выкрутасов.

Единственная проблема - составные символы, которые могут состоять из двух символов юникода, но выглядеть одним глифом.

Да, действительно, можно и так. Спасибо.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982261
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
static const char pad_12[12] = {' '};
static const char msg[] = u8"Сообщение";
std::string temp = std::string(pad_12) + msg;
printf
  (
    "\r\n| %s |\r\n",
    temp.substr( temp.size() - (sizeof(msg) + (sizeof(pad_12) - utf8literal::length(msg))) )
  )
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982296
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более корректный вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
static const char pad_12[] = "            ";
static const char msg[] = u8"Сообщение";
std::string temp = std::string(pad_12).append(msg);
printf("\r\n12345678901234567890");
size_t len = temp.size() - (sizeof(msg) - 1 + (sizeof(pad_12) - 1 - utf8literal::length(msg)));
printf
  (
    "\r\n%s\r\n",
    temp.substr(len).c_str()
  );
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982336
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ...

Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982340
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ...

Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту.

Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982342
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravРазве я не прав?

Может и прав, но толку-то с того? printf не в курсе сколько знакомест на экране займут те
байты, которые он посылает консольному драйверу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982350
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Это как в БД. Никогда наперед не знаешь сколько вернёт выборка SELECT ...

Единственный способ расчитать - это физически вычиать все записи. И посчитать уже по факту.

Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав?

Пресвятые апостолы...

Ты всё еще продолжаешь доказывать всем что строка - это массив символов?
Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк.

К слову. Ты знаешь как работает кернинг при печати True-Type?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982371
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Нет, это как кривые руки. У printf() есть вся эта информация включая локаль. Разве я не прав?

Пресвятые апостолы...

Ты всё еще продолжаешь доказывать всем что строка - это массив символов?
Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк.

Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах.

mayton
К слову. Ты знаешь как работает кернинг при печати True-Type?

Без понятия.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982382
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, printf это чистый С, без плюсов.
Во-вторых, он создавался для (и рассчитан на) исключительно текстовых терминалов.
В-третьих, UTF-8 это дерьмо, широко распространившееся исключительно благодаря своей хоть
какой-то взад совместимости как раз с таким вот наследством, которое о нём вообще не в
курсе, поэтому будь благодарен, что оно хоть как-то работает, а не выводит свои
"кракозябры" в их естественном виде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982409
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

В-третьих, UTF-8 это дерьмо, широко распространившееся исключительно благодаря своей хоть
какой-то взад совместимости как раз с таким вот наследством, которое о нём вообще не в
курсе, поэтому будь благодарен, что оно хоть как-то работает, а не выводит свои
"кракозябры" в их естественном виде.

Я считаю, что можно было сделать лучше. А utf очень плохое компромиссное решение.

И не должен я благодарить sprintf() — она не представляет ценности. Очень простая функция.

PS: Написал я костыль по мотивам совета от rdb_dev. Выравнивание заработало.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982422
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

Пресвятые апостолы...

Ты всё еще продолжаешь доказывать всем что строка - это массив символов?
Вечны болезни. Смерть. Налоги. И желание Петрава иметь random access ко всем буквом строк.

Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах.

У printf было много проблем. В т.ч. и по линии инфо-безопасности.
Но то о чем ты уже несколько топиков рассказываешь не является
проблемой в общем понимании этого слова.

Вообще в мире open-source принято немедленно обращяться к баг-трекеру
и заводить дефект.

Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много
сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений
- пиши куда надо. В комитеты. В репозитарии. В спецификации.

Если ты не знаешь как или куда. Спрашивай. Я вряд-ли подскажу т.к. я отошёл
от С++ ных дел уж лет 15 как. Но в этом форуме есть люди которые знают.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982427
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

mayton
К слову. Ты знаешь как работает кернинг при печати True-Type?

Без понятия.

Ну смотри. Чтоб расчитать длину текста в пропорциональном TrueType шрифте
есть только один способ. Его надо отпечатать. На реальном устройстве или виртуальном
не имеет значения. Кернинг - это плотное заполнение пустых протсранств между
символами или глифами символов. Например между буквами "A" и "У" будет один
кернинг а между "A" и "Ш" - другой.

Ты не можешь заранее знать длину текста в пикселах до тех пор пока его не распечатаешь.

Ты не можешь узнать количество строк в SQL выборке пока физически не сделаешь
fetch всех data-rows.

И односвязный список в функциональном программировании (очень важная и фундаментальная структура) тоже имеет неизвестную длину. Чтоб ее вычислить - нужно его перемотать
до конца. Впрочем это отдельная тема.

И пудинг нельзя оценить пока его не скушаешь.

Вобщем многое в этом мире имеет ограничения. Вот такая вот метафизика.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982428
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Майтун, у нас проблема. В языке программирования С++ после десятков лет развития не работает базовый функционал — printf(). Юзер petrav тут вообще не при делах.

У printf было много проблем. В т.ч. и по линии инфо-безопасности.
Но то о чем ты уже несколько топиков рассказываешь не является
проблемой в общем понимании этого слова.

Для людей на стек-оверфлоу это является проблемой, а для Майтуна не является. :)

mayton

Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много
сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений
- пиши куда надо. В комитеты. В репозитарии. В спецификации.

Отлично. Я так и сделаю. Прямо завтра напишу в комитет по С++ и в Майкрософт. Скажу что я от Майтуна пришёл.

Я задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. И тут приходит Майтун и заявляет, что я занимаюсь чем-то не тем. Я тебе чем-то тут мешаю?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ты чудак. Тыж сам мне пишешь.

В языке дескать проблема. Не?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982456
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЯ задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде.

Угу. Реализовал конкретную затычку для конкретного случая. Теперь добавь в свою строку
пару суррогатов и ESC-последовательность чтобы оценить тщету всего сущего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982457
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravЯ задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде.

Угу. Реализовал конкретную затычку для конкретного случая. Теперь добавь в свою строку
пару суррогатов и ESC-последовательность чтобы оценить тщету всего сущего.

Да я понимаю, что решение не совершенно. Пока оно устраивает. Тратить время на изучение ICU я пока не готов.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982470
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Теперь добавь в свою строку пару суррогатов
Суррогаты нужны только для UTF-16. "Well formed" UTF-8/-32 не должны содержать суррогатов (даже в парах).и ESC-последовательность чтобы оценить тщету всего сущего.Надеюсь, UTF-8 не будет обременён "грехами" ANSI-терминала?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982653
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНадеюсь, UTF-8 не будет обременён "грехами" ANSI-терминала?

А куда он денется? Другого-то способа вывода в Си нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982693
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
пропущено...

У printf было много проблем. В т.ч. и по линии инфо-безопасности.
Но то о чем ты уже несколько топиков рассказываешь не является
проблемой в общем понимании этого слова.

Для людей на стек-оверфлоу это является проблемой, а для Майтуна не является. :)

mayton

Где твоё обращение? Где на него реакция? Знаешь ты можешь еще много
сотрясать воздух на sql.ru но если ты по настоящему хочешь изменений
- пиши куда надо. В комитеты. В репозитарии. В спецификации.

Отлично. Я так и сделаю. Прямо завтра напишу в комитет по С++ и в Майкрософт. Скажу что я от Майтуна пришёл.

Я задал в этом топике конкретный вопрос, получил ответ, уже реализовал в коде. И тут приходит Майтун и заявляет, что я занимаюсь чем-то не тем. Я тебе чем-то тут мешаю?
Не будет изменений в sprintf. В формате кроме минимальной ширины можно задать и максимальную. Если минимальная ширина будет учитывать количество символов, а максимальная - количество байт, то это будет нелогично. Я если максимальную тоже сделать количеством символов, это сломает программы, которые используют максимальную ширину для защиты от переполнения буфера.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982710
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
Не будет изменений в sprintf. В формате кроме минимальной ширины можно задать и максимальную. Если минимальная ширина будет учитывать количество символов, а максимальная - количество байт, то это будет нелогично. Я если максимальную тоже сделать количеством символов, это сломает программы, которые используют максимальную ширину для защиты от переполнения буфера.

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982815
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А куда он денется? Другого-то способа вывода в Си нет.
Я про другое: не станешь же ты "навешивать" на UTF-8 ещё и "грехи" ANSI-терминала?..
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982823
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мне помешает? Только не на utf-8, конечно, а на printf. Аффтару просто надо
взглянуть в глаза реальности: printf работает исключительно с кучками байт, никаких
"символов" в нём не наблюдается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982839
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

А что мне помешает? Только не на utf-8, конечно, а на printf. Аффтару просто надо
взглянуть в глаза реальности: printf работает исключительно с кучками байт, никаких
"символов" в нём не наблюдается.

Любишь ты очевидные вещи писать.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982845
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
printf не в курсе сколько знакомест на экране займут те
байты, которые он посылает консольному драйверу.
А мог бы быть в курсе, хотя бы основываясь на информации по кодировке из локали и правилах кодирования символов. Посмотрим, что будет в C++20...
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982910
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
А мог бы быть в курсе, хотя бы основываясь на информации по кодировке из локали и правилах кодирования символов.
А давайте, для начала, определим ширину строки, в которой печатные символы US-ASCII перемежаются совершенно стандартными управляющими кодами ^H, ^I, ^L и вертикальной табуляции. Вот без всякого юникода и локалей.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982915
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Barlone
Не будет изменений в sprintf. В формате кроме минимальной ширины можно задать и максимальную. Если минимальная ширина будет учитывать количество символов, а максимальная - количество байт, то это будет нелогично. Я если максимальную тоже сделать количеством символов, это сломает программы, которые используют максимальную ширину для защиты от переполнения буфера.

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
Код: plaintext
1.
 printf("%1.3s", "longsting");
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982925
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
petrav
пропущено...

Извиняюсь, за глупый вопрос, а как в формате установить максимальный размер?
Код: plaintext
1.
 printf("%1.3s", "longsting");


Ничего себе. Я думал это только для плавающей точки. :)
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982932
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
А давайте, для начала, определим ширину строки, в которой печатные символы US-ASCII перемежаются совершенно стандартными управляющими кодами ^H, ^I, ^L и вертикальной табуляции. Вот без всякого юникода и локалей.
Пробежаться по строке и учесть перемещения курсора по \b \t \r \n \f и т.д. - проще пареной репы!
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982963
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В классической консоли из 90х (MS-DOS), табулятор бъёт в следующую позицию кратную восьмёрке.
Тоесть чтоб узнать позицию мы еще должны понимать откуда строка стартовала на экране.

Или что делать с символом бэкспейса? Он должен уменьшать длину строки. Можно и в отрицательную
длину уйти.

Что делать с Арабским письмом которое должно печататься справа-налево? Что делать с ascii-control,
о котором уже спрашивает Василий?

Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982965
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
Ничего! Не считать их.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982974
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Пробежаться по строке и учесть перемещения курсора по \b \t \r \n \f и т.д. - проще пареной репы!
Backspace и Horizontal Tab - требуют дополнительного контекста.
FormFeed и Vertical Tab - вообще создают новые строки и тоже требуют дополнительного контекста.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
mayton
Что делать с управляющими символами цвета, которые должны окрашивать печатаемые символы в разные
цвета фона и шрифта?
Ничего! Не считать их.

Это прекрасно.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982979
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982987
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?
Если мы говорим о подсчёте знакомест, то "ничего" эквивалентно "не считать их". Это же очевидно!
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982990
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Или что делать с символом бэкспейса? Он должен уменьшать длину строки. Можно и в отрицательную
длину уйти.
Предлагаю нормализовать строку, пропорционально сократив значимые символы и \b, если это возможно. Иными словами, если в строке перед \b встречаются значимые символы, их необходимо убрать пропорционально вместе с \b, так, чтобы вначале строки могли остаться несокращённые \b символы, которых оказалось больше, чем значимых.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982992
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
rdb_dev
Ничего! Не считать их.
Так "ничего" или "не считать"?

Не ничего, а удалять их. :)
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982994
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Не ничего, а удалять их. :)
Удалять их из строки нельзя, так как они нужны для цветового выделения символов при выводе строки на консоль, а вот не считать их при определении кол-ва знакомест - можно.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39982997
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Не ничего, а удалять их. :)
Удалять их из строки нельзя, так как они нужны для цветового выделения символов при выводе строки на консоль, а вот не считать их при определении кол-ва знакомест - можно.

А если мне нужно не в консоль, а на GUI или в файл? Тогда нужно логику параметризовать назначением.

А вообще лучше удалять! А управляющие символы выделить в отдельный API.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983024
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, тыж программист! Кому, как не тебе, знать - для чего используется каждый литерал и каждая подготовленная строка в твоей программе? Если ты собираешься выводить строку в какой-нибудь ComboBox, Memo или EditBox, нафига, спрашивается, ты будешь лепить туда управляющие символы для консоли?
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983025
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devа вот не считать их при определении кол-ва знакомест - можно.

А ничего, что это байт "К", совершенно неотличимый от соответствующего символа?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983026
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav, тыж программист! Кому, как не тебе, знать - для чего используется каждый литерал и каждая подготовленная строка в твоей программе? Если ты собираешься выводить строку в какой-нибудь ComboBox, Memo или EditBox, нафига, спрашивается, ты будешь лепить туда управляющие символы для консоли?

Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983030
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, нет, это символ с кодом 0x1b
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983031
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
Программист передаст туда только то, что считает нужным передать в зависимости от назначения функционала библиотеки. Это же не абстрактный чайник с противоположной стороны Солнца от Земли...
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983032
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Мне казалось мы обсуждаем в контексте некоей повторно используемой библиотеки. И мы не знаем что туда передаст пользователь.
Программист передаст туда только то, что считает нужным передать в зависимости от назначения функционала библиотеки. Это же не абстрактный чайник с противоположной стороны Солнца от Земли...

Тут у нас тема выравнивание по ширине. Как ты предлагаешь выравнивать по ширине если в строке перевод каретки?

Управляющие символы — это костыль. От костылей нужно избавляться. Мы не в MS-DOS.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983037
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devнет, это символ с кодом 0x1b
Нет, я говорил не о ESC, а последующем за ним символе, непосредственно определяющем
команду.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983054
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, я думал, мне не придётся объяснять, что пропускать при подсчёте знакомест надо всю ESC последовательность целиком, а не только её маркер.
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я думал, что ты в курсе, что неподдерживаемая терминалом последовательность выводится на
него "как есть".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
printf() utf8 + выравнивание по ширине
    #39983066
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, не поддерживается - не используй. Какие проблемы?
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / printf() utf8 + выравнивание по ширине
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]