我正在尝试从CSV文件中打印数组的所有值。我在下面的例子中手动执行此操作。有人可以向我展示为阵列的所有字段执行此操作的代码,无论有多少字段?我基本上只是想在一个新行上打印每个字段。
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_XS;
my $file = 'test.csv';
my $csv = Text::CSV_XS->new ({
quote_char => '"',
escape_char => '@',
binary => 1,
keep_meta_info => 0,
allow_loose_quotes => 1,
allow_whitespace => 1,
});
open (CSV, "<", $file) or die $!;
while (<CSV>) {
if ($csv->parse($_)) {
my @columns = $csv->fields();
print "$columns[0]\r\n";
print "$columns[1]\r\n";
print "$columns[2]\r\n";
print "$columns[3]\r\n";
print "$columns[4]\r\n";
print "$columns[5]\r\n";
print "$columns[6]\r\n";
print "$columns[7]\r\n";
}
else {
my $err = $csv->error_input;
print "Failed to parse line: $err";
}
}
close CSV;
答案 0 :(得分:14)
foreach(@columns)
{
print "$_\r\n";
}
而不是所有列[编号]。
答案 1 :(得分:8)
如果您只想打印以空格分隔的元素:
print @columns;
如果您想更加喜欢,可以使用join
:
print join("\n", @columns);
如果你需要做更多的事情,请迭代它:
foreach (@columns) {
# do stuff with $_
}
答案 2 :(得分:8)
出于调试目的,Data::Dump
是我的首选武器。它基本上可以打印数据结构。
use strict;
use warnings;
use Data::Dump 'dump';
# Do some stuff....
dump @array; # Unlike Data::Dumper, there's no need to backslash ('\@array')
dump %hash; # Same goes for hashes
dump $arrayref;
dump $hashref; # References handled just as well
当然,还有很多其他方法可以打印数组:
say foreach @columns; # If you have Perl 5.10+
print $_,"\n" foreach @columns; # If you don't
print "@columns"; # Prints all elements, space-separated by default
“最佳”答案取决于具体情况。你为什么需要它?你在忙什么?你想要它做什么?然后相应地调整代码。
答案 3 :(得分:1)
如果您出于诊断目的(而不是演示文稿)这样做,您可以考虑 Data :: Dumper 。在任何情况下,它都是一个很好的工具,可以了解您是否希望快速打印出或多或少的任意数据。
答案 4 :(得分:1)
{ $"="\n"; print $fh "@files"; }