1) Мне непонятно, откуда берётся ширина каждого столбца. Она известна и жёстко задана до печати таблицы? Или она вычисляется по содержимому таблицы (как в HTML), и тогда её можно узнать только после просмотра всего отчёта (т.е. печать отчёта - двухпроходная)?
2) Возможно ли, что имя/отчество/фамилия не влезет в столбец? Т.е. возможно ли, что столбец "ФИО" будет три символа? Что тогда делать?
3) Решение наверняка есть в текстовых браузерах - lynx, links и им подобных.
Ну и в Perl среди модулей наверняка есть библиотеки для генерации отчётов с Вашими требованиями.
4) Печать каждой строчки отчёта - это печать нескольких строк текста (в таблице " А должен так:" - две строки текста на первую строку отчёта).
Допустим, на первый вопрос - ответ "мы знаем ширину столбцов". Тогда алгоритм примерно такой:
* Создаём массив строк: "1", "25/11", "Иван Иванович".
* Тут у нас находится метка loop - для организации цикла. Конечно же, реально цикл мы сделаем на нормальных операторах, как учил Никлаус Вирт.
* Проходим по массиву, пытаемся напечатать содержимое. Первые две строки удалось напечатать полностью, они влезли - поэтому их обнуляем.
* А вот третья строка не влезла. Печатаем то, что влезло - т.е. "Иван". То, что напечатали - выбрасываем из строки (или, если в Си - играем поинтерами, чтобы не копировать содержимое строк).
* Да, кстати, выше мы не обнуляем влезшие строки, а точно так же выбрасываем то, что напечатали. Но т.к. влезло всё - то такИ обнуляем.
* По ходу дела записываем в целую переменную - остались ли непустые строки.
* После первого прохода у нас осталось: "", "", "Иванович" (т.е. в данном случае - да, непустые строки остались). Повторяем операцию (goto loop).
Я думаю, Вам д.б. понятно.
Upd: Критерий переноса - я за Вас придумать не могу. А в Вашем вопросе про это нет.