LINUX.ORG.RU

Красивый output


0

1

Подскажите как сделать красивый текстовый вывод в несколько столбцов, типа как это сделано в mysql. Желательно без костылей вроде получить длину самой длинной записи и на ее основании форматировать.

зы язык C или C++

в printf есть форматирование вывода строк.

mrs ()

Если С, то читай man по printf - много возможностей.

Если С++, то в книжке Страуструпа есть целый раздел «21.4. Форматирование» в Главе 21. Потоки

OldFatMan ()
Ответ на: комментарий от OldFatMan

т.е printf или cout с «манипуляторами» могут вывести несколько строк с несколькими столбцами одинаковыми по ширине, где значение этих столбцов не имеют заранее определенной длины и «поля» не поедут?

ZaeLam3l ()
Ответ на: комментарий от ZaeLam3l

Если у тебя столбцы «не имеют заранее определённой» длины, то как же ты собираешься её вычислять _до вывода_?!?!

Сделай ширины столбцов с запасами, определяемыми итеративно-экспериментально. Я обычно так и поступаю. Пока ничего лучше не придумал.

OldFatMan ()
Ответ на: комментарий от ZaeLam3l

Может, я чего-то не понял, но...

Если у тебя имеется некий набор данных, то в нём таки можно найти «самую длинную строку».

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

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

С другими вариантами я не встречался.

OldFatMan ()

> Желательно без костылей вроде получить длину самой длинной записи и на ее основании форматировать.

а разве mysql делает иначе?

name_no ★★ ()
Ответ на: комментарий от name_no

>>а разве mysql делает иначе?

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

ZaeLam3l ()
Ответ на: комментарий от ZaeLam3l

> но хотелось бы обойтись без этого

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

name_no ★★ ()
Ответ на: комментарий от name_no

Потому и спрашиваю, что не представляю :) Думал мож упустил что. Но раз другого пути нет, то буду городить костыли.
Кстати, что проще, делать массив или связаться с различными вариантами работы со строками на C++?

ZaeLam3l ()
Ответ на: комментарий от name_no

прочитать вывод с экрана и понять что данные вывелись некорректно trolface.tiff

trashymichael ★★★ ()
Ответ на: комментарий от ZaeLam3l

Даже не что проще, а как изящнее? С массивом я себе это представляю на C, но возможно C++ даст большую гибкость при работе со строками?

ZaeLam3l ()

Ну что ж. Спасибо всем за прояснение ситуации. Буду разбираться.

ZaeLam3l ()

Надо погуглить, лучше прочесть одну хорошую книгу по С++/С. Прочитав K&R/Шилдта/Страуструпа/Дейтлов ты не будешь задавать подобные вопросы.

Dikar ★★ ()
Ответ на: комментарий от Dikar

Мне показалось, что человек хочет, чтобы длинные строки переносились. А так printf(«%10s») подойдет.

DesertFox ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.