如何在Perl中的对齐列中编写文本?

时间:2009-03-06 16:14:53

标签: perl format

我正在尝试从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);
 };

6 个答案:

答案 0 :(得分:28)

制表符分隔的数据(字段长度不一致)在文本编辑器中打开时不会排列。

解决方案:

  • 在电子表格中打开文件。
  • 在文字处理程序中打开它,选择所有文本,并定义适当的制表位。 (谢谢,Justsalt
  • 在文本编辑器中,将标签宽度设置为大于任何字段的值。
  • 使用空格而非标签(例如,printf的字段宽度或formats)。

例如,您可以使用

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

-之后的%会导致字段左对齐。数字(如钱)通常是右对齐的(这是默认值)。

答案 1 :(得分:6)

查看Perl format命令。

答案 2 :(得分:4)

查看Perl6::Form CPAN模块。

关于stackoverflow的上一个问题/答案What Other Languages Have Features And Or Libraries Similar To Perls Format可能有所帮助。

答案 3 :(得分:2)

除了C的printf之外,您还可以使用“*”,

动态调整宽度
printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");

答案 4 :(得分:1)

printf在C中执行此操作。对于20个字符的字段:

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

答案 5 :(得分:1)

如果您正在使用Linux,一个简单的解决方案是使用column系统命令和-t标志。只需将空格分隔表打印到文件中,然后在该文件上使用column命令。

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