Как мне написать текст в выровненных столбцах в Perl?

StackOverflow https://stackoverflow.com/questions/619393

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь выполнить запись в файл из 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"); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top