CSVファイルの整形処理(1) – 1カラムの中に、改行を含む –

改行のあるセルを含んだExcelファイルをそのまま、CSVで保存すると

1カラムの中に、改行を含んだCSVファイルになります。

これを修正します。  ここそのままです。

ソースファイル  csv0a-test.csv

this,foo,100,
this,foo,100,
this,foo,100,
this,"f
oo",100,

変換ファイル csv0a.pl  ※使うときは、chmod + x csv0a.pl で実行形式へ

#!/usr/bin/env perl
use strict;
use warnings;

my $line = "";
while (<>) {
    $line .= $_;
    my @dqm = $line =~ /\"/g;                # double quote を数える
    next if @dqm % 2;                        # 奇数なら次の行を末尾に足す
    { # 何かの処理
        #chomp $line;
        #print "\nINPUT: [$line]\n";         # Debug

        ### Case1: カラム中の改行を削除し1行で出力
        $line =~ s/\n//g;
        # print "$line\n";                   # Debug

        ### Case2: カラム単位で処理
        my @c = map {s/^"(.*)"$/$1/gs; $_} split(/,/, $line);
        # ↑コンマで分割し両端の「""」を削除
    print join(",", map {qq("$_")} @c)."\n";
    }
    $line = ""; # 処理後は空にする
}

変換後

"this","foo","100"
"this","foo","100"
"this","foo","100"
"this","foo","100"

実はこれ、新潟市のオープンデータ対応です!

多分、ExcelをそのままCSV保存しただけ。

タイトルとURLをコピーしました