我想使用perl将csv文件拆分为多个小的csv文件。我的csv文件包含:
16047710472 4
12899376478 3
14034211945 3
16132767680 4
17059884442 4
17808605446 3
15144433554 5
15145869428 4
12269245032 3 ... ...
我想使用line-number将此文件拆分为小文件。输出文件将是动态名称。例如,第一个输出文件名为output1.csv,第二个输出文件为output2.csv,依此类推在没有输出文件。
请给我一些建议。
答案 0 :(得分:0)
use strict;
use warnings;
use Text::CSV;
my $file = 'csv_with_newline.csv';
my $size = 3;
my $file_counter = 0;
my $line_counter = 0;
my $out;
my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1, sep_char => ';' });
open my $in, "<:encoding(utf8)", $file or die "$file: $!";
while (my $row = $csv->getline($in)) {
$line_counter++;
if (not $out or $line_counter > $size) {
if ($out) {
close $out;
$line_counter = 0;
}
$file_counter++;
my $outfile = "output$file_counter.csv";
open $out, ">:encoding(utf8)", $outfile or die "$outfile: $!";
}
$csv->print($out, $row);
print $out "\n";
}
close $in;
close $out;
有关详细说明,请参阅文章http://perlmaven.com/split-csv-file-into-multiple-files
(免责声明:我写过这篇文章)