Perl Script로 CSV다루기
Perl Script로 CSV다루는 방법입니다.
펄 스크립트용 CSV 모듈로 Text-CSV가 있습니다.
액티브 펄을 사용 중이라면 PPM(Perl Package Manager)를 이용해 다음과 같은 방법으로 모듈을 추가할 수 있죠.
PPM install Text-CSV_XS
그런데 저는 Text-CSV_XS 패키지 설치가 안 되더군요.
그래서 좀 지난 버전을 설치해보니 잘 깔립니다.
PPM install Text-CSV
그런데 자꾸만 TEXT-CSV_PP 파일을 찾을 수 없다는 오류가 나네요.
인터넷에서 검색을 해보니 환경변수에 다음을 추가해 주면 잘 작동한다고 합니다.
PERL5LIB=C:\Perl\site\lib;C:\Perl\lib;
하지만 안되는군요.
개발시간의 태반은 설계가 잡아먹고,
모듈 설치다 뭐다 환경 설정이 20%를 가져가면,
코딩하는 시간은 10% 정도밖에 안 되는 것 같습니다.
아래 링크에서 Text-CSV_XS 소스를 직접 받아서 펄 라이브러리 폴더(C:\Perl\site\lib)에 넣었어요.
사용 방법도 잘 설명되어 있죠.
CSV_XS ERROR: 2023 - EIQ - QUO character not allowed
혹시 위와 같은 에러가 난다면 new 할 때 아래의 속성을 추가해 보세요.
allowloosequotes => 1
escape_char => undef
아래코드는 간단하게 작성해 본 예제에요.
!/usr/bin/perl
use Text::CSV_XS;
if ( @ARGV > 1 ){
my $input = @ARGV[0];
my $output = @ARGV[1];
my $csv = Text::CSVXS->new ({ binary => 1, allowloosequotes => 1,escapechar => undef }) or
die "Cannot use CSV: ".Text::CSVXS->errordiag ();
open my $fh, "<:encoding(utf8)", $input or die $input.": $!";
my $columnname = $csv->columnnames ($csv->getline ($fh));
while (my $row = $csv->getline ($fh)) {
print("size = $columnname\n");
for $n (0 .. $columnname) {
$column = $row -> [$n];
$row -> [$n] = $column;
}
push @rows, $row;
}
$csv->eof or $csv->error_diag ();
close $fh;
$csv->eol ("\n");
open $fh, ">:encoding(utf8)", $output or die $output.": $!";
$csv->print ($fh, $_) for @rows;
close $fh or die $output.": $!";
}else {
print "No Arguments!\n";
}
by 月風