Как мне написать текст в выровненных столбцах в Perl?
Вопрос
Я пытаюсь выполнить запись в файл из Perl.Я просто хочу записать данные в формате, разделенном табуляцией.Однако данные, которые я пишу, имеют разную длину и не выстраиваются в линию.
Например, я пытаюсь написать что-то вроде этого:
Name Education Fav_Car MoneyInBank
josh High School Porche 500
SomeOtherName PHD Hyundai 50000
Я просто хочу, чтобы данные были выровнены по заголовкам, которые у меня есть сверху.
Я выводю данные следующим образом:
printf FILE ("%s%20s%20s\n", "Name", "Ed", "Car");
while (($name, $ed, $car) = $sth->fetchrow_array) {
printf FILE ("%s>>>>>>>>>>>>>%40s%40s\n", $name, $ed, $car);
};
Решение
Данные, разделенные табуляцией (где поля не совпадают по длине), не выстраиваются в линию при открытии в текстовом редакторе.
Решения:
- Откройте файл в электронной таблице.
- Откройте его в текстовом редакторе, выделите весь текст и укажите соответствующие точки табуляции.(спасибо, Просто Посолите)
- В текстовом редакторе установите ширину вкладки на значение, большее, чем любое из ваших полей.
- Используйте пробелы вместо символов табуляции (например,,
printf
с шириной поля, или форматы).
Например, вы могли бы использовать
printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash);
Тот Самый -
после того, как %
приводит к выравниванию поля по левому краю.Цифры (как и деньги) обычно выровнены по правому краю (что используется по умолчанию).
Другие советы
Посмотрите на команду Perl format .
Посмотрите Perl6 :: Form CPAN-модуль.
Этот предыдущий вопрос / ответ # 237031 "> Какие другие языки имеют функции и библиотеки, аналогичные формату Perls в stackoverflow, может помочь.
В дополнение к способу печати printf C вы можете динамически регулировать ширину с помощью " * ",
printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
printf делает это как в C. Для 20 символьных полей:
printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money);
Если вы работаете в Linux, простым решением будет использование столбца системная команда с флагом -t. просто напечатайте разделенную пробелами таблицу в файл и просто используйте команду столбца для этого файла.
system("column -t file > new_file");