19

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

6 回答 6

28

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

解决方案:

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

例如,您可以使用

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

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

于 2009-03-06T16:19:49.163 回答
6

看一下 Perl格式命令。

于 2009-03-06T16:20:31.877 回答
4

看看Perl6::Form CPAN 模块。

上一个问题/答案哪些其他语言具有类似于堆栈溢出上的Perls 格式的功能和或库可能会有所帮助。

于 2009-03-06T17:27:00.780 回答
2

除了像C的printf这样的方式,还可以用“*”动态调整宽度,

printf FILE ("%*s%*s%*s\n", 20, "Name", length($blah), "Ed", 20, "Car");
于 2009-03-07T20:25:58.097 回答
1

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

printf("%20s%20s%20s$20S\n", $name, $ed, $car, $money);
于 2009-03-06T16:21:44.137 回答
1

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

system("column -t file > new_file"); 
于 2013-07-16T06:43:07.133 回答