2011-12-19 24 views
0

複数のCSVファイルを作成しようとしていますが、これはMySQLを使用してテーブルを入力する際に​​使用します(mysqlに直接コードを書くのに問題があり、たとえそれが少し畳み込まれていても書くことができます)。コードは正しくコンパイルされ、ファイルが作成されますが、最初のファイルだけがデータを受け取ります(最初のファイルはmysqlに入ります)。私はまだ同じ問題に遭遇しましたがPerlを使用して複数のCSVファイルを作成する

$csv = Text::CSV->new ({ binary => 1, eol => $/ }); 

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(); 
} 

私はこの問題を推測していますが、私は3つのバージョンを作成しようとした

$status = $csv->print ($iocisgene, $cisgeneref); 

とは何かです。

おかげ

答えて

2

これはあなたのプログラムの先頭にuse strictuse warningsを追加すると、あなたは簡単に問題を追跡するのに役立ちますそれらの(非常に一般的な)例1のように見えます。特に

、行:

my $cisgeneref = \@cisgeneref; 

と:彼らはあなたがプログラムで以前に使用していないアレイ(@cisgeneref@cisref)への参照を取るよう

my $cisref = \@cisref; 

は見た目ではなく疑います。

私はあなたが本当に望んでいたことを疑う:

my $cisgeneref = \@Cisgene; 

と:use strictuse warningsずにPerlコードを記述しようとすると

my $cisref = \@Cisarray; 

はひどいアイデアです。

+0

ありがとうございました。私は今から使用します – Lisa

0

なぜあなたは、単にそれらのLIBSにせずに、ファイルに文字列を表示しません:

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 sugestionが強く推奨されます。

+0

誰かが気付かずにフィールドデータに ';'を書き込むことが確実である限り、これは問題ありません。問題をどこか別の場所で見つけようとした1日後にしか気付かない。 – reinierpost

関連する問題