Подтвердить что ты не робот

Как написать текст в выровненных столбцах в 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);
 };
4b9b3361

Ответ 1

Данные с разделителями-табуляциями (где поля не согласованы по длине) не выстраиваются в очередь при открытии в текстовом редакторе.

Решения:

  • Откройте файл в электронной таблице.
  • Откройте его в текстовом процессоре, выберите весь текст и определите соответствующие табуляции. (спасибо, Justsalt)
  • В текстовом редакторе установите ширину табуляции в значение, большее любого из ваших полей.
  • Используйте пробелы вместо вкладок (например, printf с шириной поля или форматы).

Например, вы можете использовать

printf("%-15s %-15s %-10s %9s\n", $name, $edu, $car, $cash);

- после % вызывает выравнивание поля. Числа (например, деньги) обычно выравниваются по правому краю (это по умолчанию).

Ответ 2

Посмотрите на команду Perl format.

Ответ 4

В дополнение к способу C printf вы можете динамически регулировать ширину с помощью "*",

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");

Ответ 5

printf делает это как в C. Для 20 полей символов:

printf("%20s%20s%20s$20S\n",$name,$ed,$car,$money);

Ответ 6

Если вы работаете в Linux, простым решением будет использование column с флагом -t. просто распечатайте таблицу, разделенную пробелом, в файл и просто используйте команду column в этом файле.

system("column -t file > new_file");