2010-07-07 6 views
7

배열의 모든 값을 CSV 파일에서 인쇄하려고합니다. 나는 아래의 예제에서 이것을 수동으로하고있다. 어떤 사람이 필드의 수에 관계없이 배열의 모든 필드에 대해 이렇게 코드를 표시 할 수 있습니까? 기본적으로 새로운 줄에 각 필드를 인쇄하려고합니다.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; 

답변

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

대신 모든 열 [번호]. 그냥 공백으로 구분 요소를 인쇄하려면

+0

고맙습니다. 그게 잘됐다! –

6

: 당신이 좀 더 화려한 싶은 경우

print @columns; 

, 당신은 join 사용할 수 있습니다

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

을 당신이 할 필요가있는 경우 더 많은 것을 반복하고 반복하십시오 :

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

난 그냥 조인 기능을 시도하고 또한 잘 작동합니다. 그것은 실제로 내가 작업하고있는 스크립트의 또 다른 측면을 해결합니다. 매우 감사합니다! –

+2

'join '예제는 마지막 항목 뒤에 개행 문자를 출력하지 않습니다. – mob

+0

@mobrule : 필요한 경우 다음을 추가하는 것은 간단합니다.'print join ("\ n", @columns), "\ n"; ' –

1

진단 목적으로이 작업을 수행하는 경우 프리젠 테이션) 데이터 :: 덤퍼. 어떤 경우 든, 임의적 인 데이터의 빠른 인쇄물을 원한다면 알아두면 좋은 도구입니다.

+0

체크 아웃합니다. 감사! –

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 

'최고'대답은 상황에 따라 달라집니다. 왜 그것을 필요로합니까? 뭐하고있어? 그리고 무엇을 원하니? 그에 따라 코드를 완성하십시오.

1
{ $"="\n"; print $fh "@files"; } 
관련 문제