0

我有如下的 csv 文件。

Service Area Code   Phone Numbers   Preferences      
17  9861511646  0   D   2 
17  9861310397  0   D   2 
13  9827035035  0   A   2 
13  9827304969  0   D   2 
13  9827355786  0   A   2 
13  9827702373  0   A   2 
17  9861424414  0   D   2 
13  9827702806  0   A   2
23  9832380279  0   D   2 
13  9827231370  0   D   2 
13  9827163453  0   D   2 

我想根据前 4 位数字创建新文件,如 9861.csv、9827.csv 等

9861.csv中的数据应该是这样的:

Service Area Code   Phone Numbers   Preferences
17  9861511646  0   D   2
17  9861310397  0   D   2
17  9861424414  0   D   2

在 9827.csv 数据中:

Service Area Code   Phone Numbers   Preferences
13  9827035035  0   A   2
13  9827304969  0   D   2
13  9827355786  0   A   2
13  9827702373  0   A   2
13  9827702806  0   A   2
13  9827231370  0   D   2
13  9827163453  0   D   2

这是我的代码

my $file = "mycsvfile.csv";

open(my $data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {
        my @fields = split "," , $line;
        my $first_four = substr ($fields[1],  -10,  4,);

        open $line{$first_four}, '>', "$first_four.csv";

        print  { $line{$first_four} } $line;
        close OUT;
}
4

2 回答 2

1

使用Text::CSV它会减少您的一些麻烦(如标题行)。

于 2013-08-01T08:21:35.600 回答
0

我不明白你为什么使用$first_five而不是$first_four......

my $file = "mycsvfile.csv";

open(my $data, '<', $file) or die "Could not open '$file' $!\n";

while (my $line = <$data>) {

        my @fields = split "," , $line;
        my $first_four = substr($fields[1],  0,  4);

        open my $fh, '>>', "$first_four.csv" or die $!;

        print  {$fh} $line;
        close $fh;
}
close $data;
于 2013-08-01T08:21:47.503 回答