次のようなFASTAファイルがあります
>header1
AAAAA
AAA
>header2
BBBBB
DBI を使用して perl 経由で SQLite テーブルを作成できました。
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect( "DBI:SQLite:dbname=gene.db" , "" , "" ,
{ PrintError => 0 , RaiseError => 1 } );
$dbh->do("DROP TABLE IF EXISTS genes");
$dbh->do("CREATE TABLE genes(gene_name VARCHAR(50) PRIMARY KEY, sequence TEXT)");
parse();
sub parse{
my $fasta_file = 'example.faa';
my $header='';
my $sequence='';
open(INPUT, $test_file) || die "ERROR: can't read input file: $!";
while(<INPUT>){
if(/^>(.+?)/){
$header=$1;
#$dbh->do("INSERT INTO genes VALUES('$header','$sequence')");
$sequence='';
}else{
$sequence.=$_;
}
}
}
$dbh->disconnect();
これで、ヘッダーとシーケンスがデータベースに挿入されることがわかり$dbh->do("INSERT INTO genes VALUES('$header','$sequence')");
ましたが、特に最初のエントリに複数行のシーケンスがある場合、最初のエントリに問題があります。最初のエントリのシーケンスが 2 番目にシフトされているようです。$dbh->do
ステートメントをelseに移動しようとしましたが、エラーが発生する可能性があります。考え?
sqlite> select * from Genes;
header sequence
---------- ----------
header1
header2 AAAAAAAA
do()
ステートメントをelse
句に入れると、次のエラーが発生します。
DBD::SQLite::db do failed: column header is not unique