-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathfasta_parser.pm
75 lines (61 loc) · 1.16 KB
/
fasta_parser.pm
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package fasta_parser;
use strict;
use warnings;
use fasta_seq;
=pod
Create fasta_parser objects
=cut
sub new
{
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
sub filename
{
my $self=shift;
my $filename=$_[0];
$self->{filename}=$filename if (defined $filename);
return $self->{filename};
}
sub parse
{
my $self=shift;
my @seqs = ();
#my %seqs = ();
my $key = "";
my $file=$self->filename;
open FASTA, $file or die "$file $!";
while (<FASTA>)
{
chomp($_);
if ($_=~/^>(\S+)\s*(\S*)\s*(.*)/)
{
$key = $1;
my $species = "";
if (defined $2)
{
$species = $2;
}
my $desc = "";
if (defined $3)
{
$desc = $3;
}
my $fasta_obj = fasta_seq->new(ID => $key, species => $species, desc => $desc, seq => "");
#$seqs{$key}={id => $key,species => $species, desc => $desc, seq => ""};
push(@seqs, $fasta_obj);
}
else
{
my $seq_known_so_far=$seqs[-1]->seq.$_;
$seqs[-1]->seq($seq_known_so_far);
#$seqs{$key}{seq}=$seqs{$key}{seq}.$_;
}
}
close FASTA or die "$file $!";
return @seqs;
#return %seqs;
}
1;