我正在尝试创建多个CSV文件,我将用它将表格输入到Mysql中(我无法编写代码直接插入mysql,并认为这对我来说更容易编写,即使它有点复杂)。代码正确编译并创建文件,但只有第一个文件接收任何数据(并且第一个文件很好地进入mysql)。
use Text::CSV;
use IO::File;
my $GeneNumber = 4;
my @genearray;
my @Cisarray;
my @Cisgene;
$csv = Text::CSV->new ({ binary => 1, eol => $/ });
$iogene = new IO::File "> Gene.csv";
$iocis = new IO::File "> Cis.csv";
$iocisgene = new IO::File ">Cisgene.csv";
for(my $i=1; $i<=$GeneNumber; $i++)
{
@genearray=();
push(@genearray, 'Gene'.$i);
push(@genearray, rand());
push(@genearray, rand());
my $CisNumber=int(rand(2)+1);
for (my $j=1;$j<=$CisNumber;$j++){
@Cisgene=();
@Cisarray=();
push(@Cisgene, 'Gene'.$i);
push(@Cisgene, 'Cis'.$i.$j);
my $cisgeneref = \@cisgeneref;
$status = $csv->print ($iocisgene, $cisgeneref);
$csv->eol();
push (@Cisarray, 'Cis'.$i.$j);
push (@Cisarray, rand());
my $cisref = \@cisref;
$status = $csv->print ($iocis, $cisref);
$csv->eol();
}
my $generef= \@genearray;
$status = $csv->print ($iogene, $generef);
$csv->eol();
}
我猜这个问题与
有关 $status = $csv->print ($iocisgene, $cisgeneref);
我尝试创建三个版本:
$csv = Text::CSV->new ({ binary => 1, eol => $/ });
然而,我仍遇到同样的问题。
由于
答案 0 :(得分:2)
这看起来像是一种(非常常见的)案例,在程序的顶部添加use strict
和use warnings
可以帮助您轻松追踪问题。
特别是,行:
my $cisgeneref = \@cisgeneref;
和
my $cisref = \@cisref;
看起来很可疑,因为他们引用了您之前未在程序中使用的数组(@cisgeneref
和@cisref
)。
我怀疑你真的想要:
my $cisgeneref = \@Cisgene;
和
my $cisref = \@Cisarray;
尝试在没有use strict
和use warnings
的情况下编写Perl代码是一个糟糕的主意。
答案 1 :(得分:0)
为什么不简单地将字符串打印到文件中,而不使用这些文件:
open GENE, ">", "Gene.csv" or print "Can't create new file: $!\n\n";
print GENE "This;could;be;a;CSV File\nWith;2 lines;and;5 columns;=)";
close GENE or print "Can't close file: $!";
P.S。在我的定义中,我的CSV不使用逗号,而是使用分号。 此外,强烈建议@davorg使用严格和警告。