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 月風



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하는 법입니다.

윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하기

Perl Dev Kit-'윈도우에서 Perl 스크립트(*.pl)를 실행 파일(executable)로 변환하기'

저는 요즘 펄의 오묘한 세계에 잠시 발을 담그고 있습니다.
참 매력적인 언어인 것 같아요.
하지만 계속 개발하고 싶은 언어는 아닙니다.
머리가 아프거든요.^^;
펄의 스크립트 소스인 pl파일을 exe파일로 컴파일하고 싶습니다.
구글께선 아래와 같은 답을 주셨습니다.
Perl Dev Kit을 이용하면 아주 간단합니다.

펄 소스(*.pl)파일을 exe파일로 컴파일하기

  1. 액티브펄을 내려받아 설치합니다.
  2. Perl Dev Kit 평가판을 내려받아 설치합니다.
  3. Perl Dev Kit가 설치된 폴더로 가서 perlapp-gui.exe를 실행시킵니다.
  4. Open Script(CTRL+O)를 이용해 펄 스크립트 소스를 엽니다.
  5. Make Executable 버튼을 눌러 실행 파일()을 생성합니다.

Perl Dev Kit 덕분에 편하게 컴파일했네요.:D
혹시 펄 스크립트를 exe로 컴파일하실 분은 Perl Dev Kit를 이용해 보세요.
by 月風



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

Perl에서 Jquery를 이용해 email 중복을 검사하는 방법입니다.

Perl에서 Jquery를 이용해 email 중복 검사 하기

-'Perl에서  Jquery를 이용한 email 중복체크 하기'

저는 이번에 Perl을 처음 건드려 봅니다.
'펄 세계엔, 한줄의 코드로 컴퓨터를 주므르는 고수들이 살고 있다!'
한참 전에 이런 소리를 들어 봤던거 같군요.
그때 든 생각은.
'한줄? 아! 디버깅하기 힘들겠구나.' 였어요.
인간 친화적이라기보다 기계 친화적인 언어라고 생각했었죠.
펄로 만들어진 PHP는 친숙하지만 Perl이라면 왠지 거리감이 느껴지는 언어였어요.
그런데 Perl에서도 요즘 흔히 쓰는 Jquery를 이용한 Ajax 구현이 가능합니다.
덕분에 조금 가까워 졌네요.:D


duplicate_test.html
<html><head/><body>
<INPUT maxLength=12 name="email" id="email" size="20"><br/>

<div id="duplicateResult"></div>
<script type="text/javascript" src="/rfo/jquery.js"></script>

<script type="text/javascript" src="/rfo/duplicate.js"></script>
</body></html>


duplicate.js
$(document).ready(function(){
  $("#email").keyup(function() {
    var email = $('#email').attr('value'); // get email
        if (email) { // values are not empty   
      $.ajax({
        type: "GET",
        url: "/cgi-bin/duplicate.pl", // URL of the Perl script
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "email=" + email,       
        // script call was not successful
        error: function(XMLHttpRequest, textStatus, errorThrown) {
          $('div#duplicateResult').text("responseText: " + XMLHttpRequest.responseText
            + ", textStatus: " + textStatus
            + ", errorThrown: " + errorThrown);
          $('div#duplicateResult').addClass("error");
        }, // error
        // script call was successful
        // data contains the JSON values returned by the Perl script
        success: function(data){
          if (data.vacancy) { // script returned error
            $('div#duplicateResult').html("<span style='color:blue;font-size:14px;font-weight:bold;'>" + data.vacancy+"</span>");
            $('div#duplicateResult').addClass("vacancy");
          } // if
          else { // login was successful
            $('div#duplicateResult').html("<span style='color:red;font-size:14px;font-weight:bold;'>" + data.occupied+"</span>");
            $('div#duplicateResult').addClass("occupied");
          } //else
        } // success
      }); // ajax
    } // if
    else {
      $('div#duplicateResult').text("아이디를 입력해 주세요.");
      $('div#duplicateResult').addClass("error");
    } // else
    $('div#duplicateResult').fadeIn();
    return false;
  });
});


duplicate.pl

!/usr/bin/perl

use CGI;
use DBI;
use strict;
use warnings;
use rfoconfig;


read the CGI params

my $cgi = CGI->new;
my $email = $cgi->param("email");


connect to the database

my $dbh = DBI->connect("DBI:mysql:testDB:localhost","user","password");


check the username and password in the database

my $statement = qq{SELECT COUNT(*) FROM user WHERE email=?};
my $sth = $dbh->prepare($statement)  or die $dbh->errstr;
$sth->execute($email)  or die $sth->errstr;
my ($duplicatekey) = $sth->fetchrowarray;

my $json = ($duplicate_key) ?
  qq{{"occupied" : " $email는 이미 있는 아이디 입니다."}} :
  qq{{"vacancy" : "$email을 사용하실 수 있습니다."}};


return JSON string


"DBI:mysql:testDB:localhost","user","password"
우선 위 코드에서 testDB:localhost , user, password는 테스트 환경에 맞게 설정해 주세요.

print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json;
아래 파일은 Document root/ 에 넣으세요.

  • Jquery.js (http://jquery.com 에서 다운로드 받으세요.)
  • duplicate.js
  • duplicate_test.html

아래 파일은 Document root/cgi-bin 에 넣으세요.

  • duplicate.pl


 

참고자료
Very simple login using Perl, jQuery, Ajax, JSON and MySQL

by 月風



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

WAMP서버에 Perl과 CGI를 연동하는 방법입니다.

WAMP서버에 Perl, CGI 연동하기

텍스트 메이트-'WAMP서버에 Perl, CGI 연동하기'

우선 Active Perl을 다운받아 설치합니다.

아파치 서버의 httpd.conf Directory안에 있는 Options
 Includes ExecCGI를 추가해 줍니다.

DirectoryIndexindex.cgi index.pl를 추가해 줍니다.

cgi-bin 경로가 Default가 아니라면, 알맞은 경로로 변경해 줍니다.

ScriptAlias /cgi-bin/ "/cgi-bin"
<Directory "/cgi-bin">

다음을 추가해 주면 httpd.conf 설정이 완료 됩니다.
AddHandler cgi-script .cgi
AddHandler cgi-script .pl

펄 개발을 할 때, 스크립트 파일인 /cgi-bin/filename.pl 파일의 가장 위에
#!c:/Perl/bin/perl.exe (펄 경로) 를 추가해줍니다.

만약 경로를 알맞게 써주었는데도 제대로 작동하지 않으면,
httpd.conf 파일에 ScriptInterpreterSource registry 를 한 줄 추가해 줍니다.

이제 MySQL 인터페이스를 설치할 차례입니다.

cmd를 실행하고, 펄이 설치된 폴더로 가세요.

c:\perl\bin\> ppm repo add uwinnipeg

위 명령어로 저장소를 추가해 줍니다.

c:\perl\bin\> ppm install DBD-mysql

마지막으로 DBD-mysql을 인스톨 하면 완료!

액티브펄 설치시에 폴더를 임의로 변경했다면,
DBD가 엉뚱한 폴더에 인스톨 될 수 있습니다.
저는 64비트 OS용을 깔았더니, c:\Perl64에 설치되더라고요.
하지만 인스톨된 DBD-mysql을 설치된 펄 폴더로 옮겨주면 이상 없이 잘 동작합니다.
펄 개발 환경을 구축하실 분이 계실지 모르겠지만,
혹시 계시다면 이 글이 도움이 되면 좋겠네요.:D

참고 자료

Setting Up Perl and CGI For Wamp Server WAMP(P)

by 月風



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!