概要
CSVやTSVファイルとして保存してあるファイルを、データベースへ登録するために、
Perlにて文字コードを変換し、PostgreSQLへ登録する。
前提として、入力元のCSVやTSVファイルの文字コードが判明している事が必要である。(今回はEUC-JP)
Perl5.8以上では文字コードを扱うモジュールとして Encode.pm が登場しました。
今回はこちらを利用する場合を想定して記載します。
また、環境はLinux上での作業とします。
使用モジュールのインストール
使用するモジュールがインストールされている事を確認します。
shell> perl -MEncode
このように入力し、エラーが出なければモジュールがインストールされています。
(入力待ち状態となりますので、 Ctrl + c や Ctrl + d で抜けてください)
インストールされていない場合は、下記のようなエラーが出力されます。
Can't locate Encode.pm in @INC (@INC contains: /usr/lib/perl5/si......
インストールされていた方は、この章を読み飛ばして結構です。
それでは、Encode.pm のインストールを開始します。
インストールは、Perl のモジュール群が登録されているCPANから行います。
最近では、CPANからのインストールを扱いやすくした「cpanm」なども出ていますが、
ここではデフォルトの cpanコマンドを用いてインストールします。
rootユーザになります
shell> su -
cpan コマンドを入力します
shell# cpan
そうすると、cpanシェルが立ち上がり下記のような画面が表示されます。
cpan shell -- CPAN exploration and modules installation (v1.7602)
ReadLine support available (try 'install Bundle::CPAN')
cpan>
cpanシェルにて Encodeモジュールをインストールします。
cpan> install Encode
インストールが成功すると、最後に下記のように表示されます。
/usr/bin/make install -- OK
これでインストールは完了します。
TSVファイルの文字コードをUTF-8に変換
基本的なPerlでのファイル入出力の扱い説明は省略します。
文字コードの変換には Encode.pm を使用します。
ドキュメントは、コマンドライン上で perldoc Encode と入力する事で読む事が出来ます。
encode('utf8', decode('euc-jp', $input));
入力の文字コードが分かっている場合は、この方法で文字コードを変換出来る。
(文字の判別はミスする可能性もあるため、入力元の文字コードは分かっている方が望ましい)
具体的に、ファイルを読み込み出力するには下記のようにする。
#/usr/bin/perl
#
use strict;
use Encode;
my @inputdata;
my $file = 'ファイルのパス';
open(IN, $file) or die $!;
@inputdata = ;
close(IN);
for (@inputdata) {
my $line = encode('utf8', decode ('euc-jp', $_) );
# 入力値に対して何か処理をしたい場合はここで行う
print $line;
}
# 入力値をまとめてから処理したい場合は、
# 上記で print せず、
# 配列などにデータをためてから処理を行う。