• Как мне организовать вывод данных, имитирующию таблицу, ей не являясь(Не могу придумать как организовать перенос строки)?

    @Karpion
    1) Мне непонятно, откуда берётся ширина каждого столбца. Она известна и жёстко задана до печати таблицы? Или она вычисляется по содержимому таблицы (как в HTML), и тогда её можно узнать только после просмотра всего отчёта (т.е. печать отчёта - двухпроходная)?

    2) Возможно ли, что имя/отчество/фамилия не влезет в столбец? Т.е. возможно ли, что столбец "ФИО" будет три символа? Что тогда делать?

    3) Решение наверняка есть в текстовых браузерах - lynx, links и им подобных.
    Ну и в Perl среди модулей наверняка есть библиотеки для генерации отчётов с Вашими требованиями.

    4) Печать каждой строчки отчёта - это печать нескольких строк текста (в таблице " А должен так:" - две строки текста на первую строку отчёта).
    Допустим, на первый вопрос - ответ "мы знаем ширину столбцов". Тогда алгоритм примерно такой:
    * Создаём массив строк: "1", "25/11", "Иван Иванович".
    * Тут у нас находится метка loop - для организации цикла. Конечно же, реально цикл мы сделаем на нормальных операторах, как учил Никлаус Вирт.
    * Проходим по массиву, пытаемся напечатать содержимое. Первые две строки удалось напечатать полностью, они влезли - поэтому их обнуляем.
    * А вот третья строка не влезла. Печатаем то, что влезло - т.е. "Иван". То, что напечатали - выбрасываем из строки (или, если в Си - играем поинтерами, чтобы не копировать содержимое строк).
    * Да, кстати, выше мы не обнуляем влезшие строки, а точно так же выбрасываем то, что напечатали. Но т.к. влезло всё - то такИ обнуляем.
    * По ходу дела записываем в целую переменную - остались ли непустые строки.
    * После первого прохода у нас осталось: "", "", "Иванович" (т.е. в данном случае - да, непустые строки остались). Повторяем операцию (goto loop).

    Я думаю, Вам д.б. понятно.

    Upd: Критерий переноса - я за Вас придумать не могу. А в Вашем вопросе про это нет.
    Ответ написан
    3 комментария