首页 > 解决方案 > 在 perl 中拆分大型 csv 文件

问题描述

我正在尝试拆分具有 150 万行的 CSV 文件

例子:

test;abc;kk
test1;abc1;kk1

以上完整数据存在于CSV第一列下

我试图通过尝试逐行读取 csv 但没有获得所需的输出来将这些字段映射到 json 对象。由于一些官方问题,我不认为使用 text::csv

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

my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";

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

while (my $line = <$data>) {
     chomp $line;
     my @fields = split ";" , $line;
     for (my $i = 0; $i <= 2; $i++) {
       print "$fields[$i] ";
     }
}

My output now shows 
        t e s t ; a b c ; k k ; t e s t 1 ; a b c 1 ; k k 1.

我没有得到首选的输出。我可能犯了一些错误一旦我运行我得到的代码

预期的输出应该是第一次迭代......然后是第二次迭代的下一行

  fields[0] = test
  fields[1] = abc
  fields[2] = kk
     


  

标签: perlsplit

解决方案


尝试下一个代码,确保在 split 命令中您使用了正确的分隔符:

split ";" , $line;

这是perl代码

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

my $file = $ARGV[0] or die "Need to get CSV file on the command line\n";

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

my $line_no = 0;
while (my $line = <$data>) {
     chomp $line;
     $line_no++;
     print "Line $line_no:\n";
     my @fields = split ";" , $line;
     for (my $i = 0; $i <= 2; $i++) {
       print "fields[$i] = $fields[$i]\n";
     }
}

这是输入文件的内容

test;abc;kk
test1;abc1;kk1

这是输出

Line 1:
fields[0] = test
fields[1] = abc
fields[2] = kk
Line 2:
fields[0] = test1
fields[1] = abc1
fields[2] = kk1

推荐阅读