Когда вы испускаете самую первую строку,
Artist Title Price Genre Disc Sale Tax Cash
чтобы добиться «выравнивания», вы должны «заранее» знать, какой ширины должен быть каждый столбец (в противном случае выравнивание невозможно). Как только вы действительно узнаете необходимую ширину для каждого столбца (есть несколько возможных способов добиться этого в зависимости от того, откуда поступают ваши данные), тогда вам поможет функция setw
, упомянутая в другом ответе, или (подробнее зверски ;-) вы можете выдать тщательно рассчитанное количество дополнительных пробелов (неуклюже, конечно) и т.д. Я все равно не рекомендую вкладки, поскольку у вас нет реального контроля над тем, как конечное устройство вывода будет их отображать в целом.
Возвращаясь к основной проблеме, если у вас есть значение каждого столбца в каком-либо vector<T>
, например, вы можете выполнить первый проход форматирования, чтобы определить, например, максимальную ширину столбца (обязательно примите во внимание ширину заголовок столбца, конечно, тоже).
Если ваши строки идут «одна за другой» и выравнивание имеет решающее значение, вам придется кэшировать или буферизовать строки по мере их поступления (в памяти, если они подходят, в противном случае в файле на диске, который вы позже «перемотаете» и перечитайте с самого начала), следя за обновлением вектора «максимальной ширины каждого столбца» по мере поступления строк. Вы не можете ничего вывести (даже заголовки!), Если сохранение выравнивания имеет решающее значение, пока вы не увидите самую последнюю строку (если, конечно, вы каким-то волшебным образом не знаете ширину столбцов ;-).
person
Alex Martelli
schedule
21.03.2010