我对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用户解释如何制作一个新的变量,它结合了我上面指定的两个列?
提前感谢您的建议!
答案 0 :(得分:1)
我认为您对php artisan optimize
的调用存在问题,因为column_names
返回数组引用,而getline
需要列表。但经过一些实验后,似乎column_names
也会接受数组引用。这只是无证件的行为。所以这是正确的
column_names
我会提取要操作的值并使用简单的$csv->column_names($csv->getline($fh))
语句来构建行
join
只是为了阻止它警告我我可能会尝试将评论放在no warnings
列表中
qw