有没有办法使用Text :: CSV添加列来创建像R一样的新列?

时间:2015-10-12 17:28:02

标签: perl csv

我对Perl编程很新。我正在尝试使用现有文件中的某些列解析文件并创建一个新文件。使用Text::CSV,到目前为止,我有以下代码:

use strict;
use warnings;
use Text::CSV;

# binary, allow special charachters
# auto diag = 1, report irregularities immediately
my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 , sep_char => ',' });

my $file = "Genome_Studio_DNAReport_No_Header.csv";

open(my $fh, "<:encoding(utf8)", $file) or die "Could not open '$file': $!\n";

$csv -> column_names($csv->getline($fh)); # use header to ref cols by name

while (my $row = $csv->getline_hr ($fh)) {    
    print $row->{DNA_ID} ,"\t", $row->{"#No_Calls"}, "\t", $row->{"#Calls"}+$row->{"#No_Calls"}"\n"
}

close $fh or die "'$file': $!";

{I}尝试添加print$row->{"#Calls"}以创建新列的$row->{"#No_Calls"}语句中的最后一部分显然不起作用,但是我将如何处理它R.我已经找到了解决我问题的方法,但我担心我对Perl不熟悉,并且还不了解它的所有特定细微差别。

有人可以帮助我并向R用户解释如何制作一个新的变量,它结合了我上面指定的两个列?

提前感谢您的建议!

1 个答案:

答案 0 :(得分:1)

我认为您对php artisan optimize的调用存在问题,因为column_names返回数组引用,而getline需要列表。但经过一些实验后,似乎column_names也会接受数组引用。这只是无证件的行为。所以这是正确的

column_names

我会提取要操作的值并使用简单的$csv->column_names($csv->getline($fh)) 语句来构建行

join只是为了阻止它警告我我可能会尝试将评论放在no warnings列表中

qw