2
我有以下代碼將數據傳遞給csv,但CSV中的列順序看起來是隨機的(我將散列傳遞給CSV)。我很難定義列的順序。修復散列中的散列位置
有沒有一種方法可以修復哈希在我的%output_var哈希中的位置,這樣我就可以在CSV中有效地定義列順序了?
$common->print_header('text/csv','export_order_products.csv');
print common::to_csv(sort values %output_var)."\r\n";
my $cart_id;
foreach my $order (@data_to_export) {
$order->{'order-id'} =~ s/\.cgi//;
$order->{'order-item-id'} =~ s/\.cgi//;
$order->{'purchase-date'} =~ s/\.cgi//;
my @line;
for (sort {$output_var{$a} cmp $output_var{$b}; } keys %output_var) {
push @line, $order->{$_};
}
print common::to_csv(@line)."\r\n";
}
CSV子:
sub to_csv {
my ($csv_line);
my (@fields) = @_;
my $i;
for ($i=0; $i<scalar(@fields); $i++) {
$fields[$i] =~ s/\r/\\r/gis;
$fields[$i] =~ s/\n/\\n/gis;
$fields[$i] =~ s/"/""/gis; # -- "
$fields[$i] =~ s/(.*,.*)/"$1"/gis;
$fields[$i] = '' if ($fields[$i] eq '0');
}
$csv_line = join ',', @fields;
return $csv_line;
}
這真的很酷。要了解更多關於如何/爲什麼這會工作,谷歌「perl哈希切片」。請注意'@ $ order {@headers}'的語法。你可能會認爲你也可以做這樣的事情,但你做不到。 '$ order - > {@ headers}' – Mort
@Mort,但是,您可以['$ order-> @ {@headers}'](http://www.perlmonks.org/?node_id=977408)自5.24 (或者從5.20開始,如果你使用'use feature qw(postderef);'和'no warnings qw(experimental :: postderef);'); – ikegami