PerlでCSVを読み込んでみた

今行っている仕事で、CSVを読み込んでMovable Typeにインポートする処理が必要です。
そこで、PerlでCSVを読み込む方法を調べてみました。

CPANにはCSV関係のモジュールも多数あります。
CSVをキーワードにして検索してみると、Text::CSV::Slurpというモジュールがもっとも簡単そうでした。
Text::CSV::Slurpは、ファイルや文字列からCSVを読み込んで、ハッシュリファレンスの配列(へのリファレンス)に変換してくれるモジュールです。

1.CSVファイルのフォーマット

Text::CSV::Slurpで読み込むCSVファイルは、以下のようなフォーマットにします。

  • 1行目には、フィールドの名前を入れます。
  • 2行目以降に個々のデータを入れます。

例えば、以下のようなデータを読み込みたいとします。

nameaddressphone
山田太郎東京都千代田区03-1234-XXXX
田中次郎大阪府大阪市06-2345-XXXX
高橋花子神奈川県横浜市045-345-XXXX

この場合、CSVファイルの内容は以下のようにします。

name,address,phone
山田太郎,東京都千代田区,03-1234-XXXX
田中次郎,大阪府大阪市,06-2345-XXXX
高橋花子,神奈川県横浜市,045-345-XXXX

2.CSVファイルの読み込み

次に、Text::CSV::SlurpでCSVファイルを読み込みます。
例えば、カレントディレクトリにある「sample.csv」というファイルを読み込んで、結果を変数$csvに代入するなら、以下の用に書きます。

use Text::CSV::Slurp;
my $csv = Text::CSV::Slurp->load(file => 'sample.csv');

前述のCSVファイルのサンプルを読み込むと、結果は以下のようなハッシュリファレンスの配列になります。
後は、この配列を加工して、データベースに保存するなどの処理を行います。

[
  {
    'name' => '山田太郎',
    'address' => '東京都千代田区',
    'phone' => '03-1234-XXXX'
  },
  {
    'name' => '田中次郎',
    'address' => '大阪府大阪市',
    'phone' => '06-2345-XXXX'
  },
  {
    'name' => '高橋花子',
    'address' => '神奈川県横浜市',
    'phone' => '045-345-XXXX'
  }
];

3.CSVの文字列を変換する

CSVの文字列を、ハッシュリファレンスの配列に変換することもできます。
それには、以下のように書きます。

my $csv = Text::CSV::Slurp->load(string => CSVの文字列);