2010-07-07 36 views
7

Tôi đang cố gắng in tất cả các giá trị của một mảng từ tệp CSV. Tôi là loại thủ công làm điều này trong ví dụ dưới đây. Ai đó có thể chỉ cho tôi mã để làm điều này cho tất cả các lĩnh vực của mảng không có vấn đề bao nhiêu lĩnh vực có? Tôi về cơ bản chỉ cố gắng in từng trường trên một dòng mới.Cách in tất cả các giá trị của một mảng trong Perl

#!/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; 

Trả lời

11
foreach(@columns) 
{ 
    print "$_\r\n"; 
} 

Thay vì tất cả các cột [số].

+0

Cảm ơn bạn. Điều đó làm việc tuyệt vời! –

6

Nếu bạn chỉ muốn in các yếu tố tách bằng dấu cách:

print @columns; 

Nếu bạn muốn trở thành một chút lạ mắt hơn, bạn có thể sử dụng join:

print join("\n", @columns); 

Nếu bạn cần làm một cái gì đó khác, lặp lại qua nó:

foreach (@columns) { 
    # do stuff with $_ 
} 
+0

Tôi vừa thử chức năng kết nối và nó cũng hoạt động rất tốt. Điều đó thực sự giải quyết một khía cạnh khác của kịch bản mà tôi đang làm việc. Cảm ơn rất nhiều! –

+2

Ví dụ 'join' của bạn không in dòng mới sau mục cuối cùng. – mob

+0

@mobrule: Nếu điều này là cần thiết, sau đó nó tầm thường để thêm: 'in tham gia (" \ n ", @ cột)," \ n ";' –

1

Nếu bạn làm điều này cho mục đích chẩn đoán (trái với bản trình bày), bạn có thể xem xét Dữ liệu :: Dumper. Trong mọi trường hợp, đó là một công cụ tốt để biết nếu bạn muốn in nhanh dữ liệu tùy ý nhiều hơn hoặc ít hơn.

+0

Tôi sẽ kiểm tra xem nó ra. Cảm ơn! –

8

Vì mục đích gỡ lỗi, Data::Dump là vũ khí lựa chọn của tôi. Về cơ bản nó in các cấu trúc dữ liệu.

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 

Có rất nhiều cách khác để in mảng, tất nhiên:

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 

Câu trả lời 'tốt nhất' phụ thuộc vào tình hình. Tại sao bạn cần nó? Bạn đang làm việc với những gì? Và bạn muốn nó làm gì? Sau đó, mùa mã phù hợp.

1
{ $"="\n"; print $fh "@files"; } 
Các vấn đề liên quan