【发布时间】:2012-05-20 22:42:37
【问题描述】:
我正在解析一个 CSV 文件,其中每一行如下所示。
10998,4499,SLC27A5,Q9Y2P5,GO:0000166,GO:0032403,GO:0005524,GO:0016874,GO:0047747,GO:0004467,GO:0015245,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,
每行末尾似乎都有逗号。
我想获取第一个术语,在本例中为“10998”,并获取与其相关的 GO 术语的数量。 所以我在这种情况下的输出应该是,
输出:
10998,7
但它显示的是 299。我意识到每行总共有 303 个逗号。而且我无法找到删除尾随逗号的简单方法。谁能帮我解决这个问题?
谢谢!
我的代码:
use strict;
use warnings;
open my $IN, '<', 'test.csv' or die "can't find file: $!";
open(CSV, ">GO_MF_counts_Genes.csv") or die "Error!! Cannot create the file: $!\n";
my @genes = ();
my $mf;
foreach my $line (<$IN>) {
chomp $line;
my @array = split(/,/, $line);
my @GO = splice(@array, 4);
my $GO = join(',', @GO);
$mf = count($GO);
print CSV "$array[0],$mf\n";
}
sub count {
my $go = shift @_;
my $count = my @go = split(/,/, $go);
return $count;
}
【问题讨论】:
-
在进行拆分之前进行正则表达式替换:
-
如果您将
my $count = my @go = split(/,/, $go)更改为my $count = my @go = split(/,/, $go, 0)或只是my $count = my @go = split /,/, $go,那么后面的空字段将被丢弃。