あらゆるファイルをFASTA化する
 「どう書く?org」で進数の変換をごにょごにょやってみて、もう少し色々いじってみたくなったので、職場の先輩が作ってたジョーク(?)ソフトを Perl で再実装してみました。

 引数でファイルを指定してやると、ファイルの内容に従って、FASTAファイルを作成します。ファイルを読み込んだ後、10進->2進->4進(ヌクレオチド)という変換をしてます。Math-BaseCalcを使えば、ファイルの内容を直接4進数に変換できて楽そうだったんだけど、元の趣旨からはずれるので使ってません。

all_convert_to_fasta.pl

use strict;
use warnings;

my %dna = (
'00' => 'A',
'01' => 'C',
'10' => 'G',
'11' => 'T',
);

sub dec2bin {
unpack( "B8", pack( "C", $_[0] ) );
}

sub string2decs {
unpack( "C*", $_[0] );
}

sub print_fasta {
my ( $title, $seq ) = @_;
local $\ = "\n";
open my $fh, '>', "$title.fasta" or die $!;
print $fh ">$title";
while ( $seq =~ /([ACGT]{1,80})/go ) {
print $fh $1;
}
close $fh;
}

my $file = shift or die "usege: $0 path/to/your/file\n";
open my $fh, '<', $file or die "$!: $file\n";
my $data = do { local( $/ ) ; <$fh> } ;
close $fh;

my $bin = join '', map { dec2bin $_ } string2decs($data);
my @bin_list = split '', $bin;

my $result = '';
while ( my $nuc = join '', splice( @bin_list, 0, 2 ) ) {
$result .= $dna{$nuc};
}

print_fasta( $file, $result );


 100 KB ぐらいのファイルでも数秒かかっちゃうなぁ。もう少し速く出来ないかしら。

参考サイト:
Perl の数値変換
2進10進数変換
404 Blog Not Found:Perlで2進数

 
[PR]
by fkmn | 2007-09-18 23:55 | IT
<< 【感想】フラット化する世界 「ITpro Challeng... >>


とあるWebアプリケーションエンジニアの日記
S M T W T F S
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
カテゴリ
以前の記事
ブログパーツ
リンク
検索
タグ
最新のトラックバック
プログラミングが「出来る..
from とりあえず9JP?
Genographic ..
from ナンジャモンジャ
ジュセリーノ
from ありの出来事
くちこみブログ集(ライフ..
from くちこみブログ集(ライフ)(..
以降、丁寧語で行こう!
from エッセイ的な何か
その他のジャンル
ファン
記事ランキング
ブログジャンル
画像一覧

fkmnの最近読んだ本 フィードメーター - フッ君の日常 あわせて読みたい AX