PerlでCSV形式データ作成・出力

Nid: 4
  • Posted on: 31 May 2014
  • By: Anonymous
$ cat parsecsv.pl
#!/usr/bin/perl
use strict;
use Encode;
use Text::CSV_XS;
use utf8;

my @rows;
my $csv = Text::CSV_XS->new ({ binary => 1 }) or
    die "Cannot use CSV: ".Text::CSV_XS->error_diag ();
open my $fh, "<:encoding(utf8)", "input.csv" or die "input.csv: $!";
while (my $row = $csv->getline ($fh)) {
    $row->[2] =~ s/電話://; # 3列目の文字列”電話:”を削除。
    push @rows, $row;
}
$csv->eof or $csv->error_diag ();
close $fh;

$csv->eol ("\r\n");
open $fh, ">:encoding(utf8)", "output.csv" or die "output.csv: $!";
$csv->print ($fh, $_) for @rows;
close $fh or die "output.csv: $!";

UTFで保存。

$ nkf -w --overwrite parsecsv.pl

入力ファイル

$ cat input.csv
福岡県庁,〒812-8577福岡市博多区東公園7番7号,電話:092-651-1111,
佐賀県庁,〒840-8570佐賀市城内1丁目1番59号,電話:0952-24-2111,
長崎県庁,〒850-8570長崎市江戸町2番13号,電話:0958-24-1111,
熊本県庁,〒862-8570熊本市水前寺6丁目18番1号,電話:096-383-1111,
大分県庁,〒870-8501大分市大手町3丁目1番1号,電話:0975-36-1111,
宮崎県庁,〒880-8501宮崎市橘通東2丁目10番1号,電話:0985-24-1111,
鹿児島県庁,〒890-8577鹿児島市鴨池新町10番1号,電話:099-286-2111,
沖縄県庁,〒900-8570那覇市泉崎1丁目2番2号,電話:098-866-2074,

実行

$ perl parsecsv.pl

出力ファイル

$ cat output.csv
"福岡県庁","〒812-8577福岡市博多区東公園7番7号","092-651-1111",
"佐賀県庁","〒840-8570佐賀市城内1丁目1番59号","0952-24-2111",
"長崎県庁","〒850-8570長崎市江戸町2番13号","0958-24-1111",
"熊本県庁","〒862-8570熊本市水前寺6丁目18番1号","096-383-1111",
"大分県庁","〒870-8501大分市大手町3丁目1番1号","0975-36-1111",
"宮崎県庁","〒880-8501宮崎市橘通東2丁目10番1号","0985-24-1111",
"鹿児島県庁","〒890-8577鹿児島市鴨池新町10番1号","099-286-2111",
"沖縄県庁","〒900-8570那覇市泉崎1丁目2番2号","098-866-2074",