Perl Script로 CSV다루는 방법입니다.

Perl Script로 CSV다루기

Perl Dev Kit-'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)에 넣었어요.

CPAN CSV_XS.PM

사용 방법도 잘 설명되어 있죠.

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 .. $column
name) {
      $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 月風