我正在尝试从 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 格式命令。

查看 Perl6 :: Form CPAN模块。

上一个问题/答案其他语言的特性和/或库类似于Perls格式的 stackoverflow可能有所帮助。

除了C的printf之外,您还可以使用“*”动态调整宽度,

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标志。只需将空格分隔表打印到文件中,然后在该文件上使用column命令。

system("column -t file > new_file"); 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top