0

さまざまな列と複数のテキスト修飾行(最初の行は列名を示します)を含むコンマ区切りのデータセットを返すWebサービスを呼び出しています。変化する行を連結しながら、各行をデータベースに挿入する必要があります。

データはそのように返されます

"Email Address","First Name","Last Name", "State","Training","Suppression","Events","MEMBER_RATING","OPTIN_TIME","CLEAN_CAMPAIGN_ID"

"scott@example.com","Scott","Staph","NY","Campaigns and activism","Social Media","Fundraiser",1,"2012-03-08 17:17:42","Training"

Stateとの間には最大60列を含めることができMember_Rating、これらのフィールドのデータは連結されて1つのデータベース列に挿入されます。リストの最初の4つのフィールドと最後の3つのフィールドは常に同じです。これに取り組む最善の方法がわかりません。

4

1 に答える 1

1

このソリューションがあなたのニーズに合っているかどうかはわかりません。そうだといい。これは、最初の4つと最後の3つを除くすべてのフィールドをスペースperlで囲んで結合するスクリプトです。-非標準のモジュールを使用しているため、または同様のツールText::CSV_XSを使用してインストールする必要があります。CPAN

内容infile

"Email Address","First Name","Last Name","State","Training","Suppression","Events","MEMBER_RATING","OPTIN_TIME","CLEAN_CAMPAIGN_ID"
"scott@example.com","Scott","Staph","NY","Campaigns and activism","Social Media","Fundraiser",1,"2012-03-08 17:17:42","Training"

内容script.pl

use warnings;
use strict;
use Text::CSV_XS;

my $csv = Text::CSV_XS->new({ 
        allow_whitespace => 1,
});

open my $fh, q[<], $ARGV[0] or die qq[Open: $!\n];

while ( my $row = $csv->getline( $fh ) ) {
        my $concat = join q[ - ], (@$row)[4 .. @$row-4];
        splice @$row, 4, scalar @$row - (3 + 4), $concat;
        $csv->print( \*STDOUT, $row );
        print qq[\n];
}

次のように実行します。

perl script.pl infile

次の出力で:

"Email Address","First Name","Last Name",State,"Training - Suppression - Events",MEMBER_RATING,OPTIN_TIME,CLEAN_CAMPAIGN_ID
scott@example.com,Scott,Staph,NY,"Campaigns and activism - Social Media - Fundraiser",1,"2012-03-08 17:17:42",Training
于 2012-04-23T18:37:54.257 に答える