2010-06-02 3 views
0

나는 원시 데이터베이스 덤프를 csv 파일로 구문 분석하기 위해 perl을 사용하고 있습니다. 문제는 Excel에서 올바르게 형식이 지정되지 않았기 때문입니다. 파일의 맨 위에 헤더를 추가하고 모든 쉼표도 제거해야합니다. 이것은 perl 하나의 라이너에서 수행 될 수 있지만, 이것은 더 큰 perl 스크립트의 일부이므로 주 Perl 스크립트에서 수행하려고합니다. 나는 이런 식으로 뭔가를 시도했다 :CSV 파일의 쉼표 바꾸기

print "Formatting csv file... $csvFile\n"; 

    open IN, '<', $csvFile or die; 
    my @contents = <IN>; 
    close IN; 

    @contents =~ s/\'//g; 

    open OUT, '>', $csvFile or die; 
    print OUT @contents; 
    close OUT; 

당신은 물론이 작업을 수행 할 수 있습니다

@contents =~ s/\'//g; 

내가 쉼표를 제거하고 파일의 상단에 줄을 추가해야합니다. 어떤 아이디어?

+3

[Perl을 사용하여 CSV 파일을 만드는 방법은 무엇입니까?] (http://stackoverflow.com/questions/1444096/how-do-i-create-a-csv-file-using-perl) –

+1

어떻게됩니까? 's/\ '// g' 모든 쉼표를 제거합니까? 그러면 모든 작은 따옴표가 제거됩니다. – Ether

+0

쉼표가 아닌 필드 구분자를 사용합니다. 예 : "|" , 데이터베이스에서 덤핑하는 것이 다른 해결책 일 수 있습니다. 예를 들어 데이터 필드에 쉼표가 포함되어 있으면 정규식이 문제를 일으킬 수 있습니다. 오라일리. Excel로 가져올 때 필드 구분 기호를 지정할 수 있습니다. – heferav

답변

0

그것은 라인과 새로운 임시 파일로 출력을하여 라인에서 파일을 읽은 다음 원래 다시 해당 파일의 이름을 변경하는 것이 더 쉽습니다 :

print "Formatting csv file... $csvFile\n"; 
my $newfile = '/tmp/newfilename.csv'; 
open(my $inFileHandle, '<', $csvFile) or die "cannot open $csvFile for reading: $!"; 
open(my $outFileHandle, '>', $newFile) or die "cannot open $newFile for writing: $!"; 

print $outFileHandle "The header line you need to add\n"; 
while (my $line = <$inFileHandle>) 
{ 
    $line =~ s/\'//g; 
    print $outFileHandle $line; 
} 

close $inFileHandle; 
close $outFileHandle; 
rename $newFile, $csvFile; 

을 ...하지만 난 당신이 무슨 뜻인지 궁금해 "Excel 용으로 올바르게 형식이 지정되지 않았습니다."그리고 모든 작은 따옴표를 제거해야하는 이유는 무엇입니까?

0

거의 헤더 부분이 있습니다.

my $header='"field 1","field 2","field n"'; 

open OUT, '>', $csvFile or die; 
print OUT "$header\n"; 
# print the CSV part... 
close OUT; 

csv로의 일부를 들어, 라이브러리를 사용하십시오 출력의 첫 번째 줄에 들어

, 그냥 CSV 전에 파일에 있음을 인쇄 할 수 있습니다. 많이있다. This tutorial는 귀하를 진술 할 것입니다.