perl - 在 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
解决方案
尝试下一个代码,确保在 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
推荐阅读
- java - 将数组插入arraylist的最佳方法
- laravel - 在 Laravel 项目中哪里可以找到服务容器?
- mysql - 当 X=Y 按 Y 分组时如何求和?
- django - 如何在视图中禁用 Django 信号?
- php - 移除不支持的html标签(简单的HTML Dom)
- c# - 带有移动统一变换的无限循环
- github - Ansible 是否有用于分叉 github 存储库的模块?
- java - 使用hibernate从数据库中检索blob并使用jsp显示在网页上
- c++ - 尝试使用 std::visit 和 lambda 表达式从 std::variant 返回值
- regex - 用于在数字列表成员周围环绕一些文本的单行