JPRED-2 Current state of the SVN trank
[jpred.git] / jpred / lib / FASTA / File.pm
1 package FASTA::File;
2
3 use strict;
4 use warnings;
5 use Carp;
6
7 use base qw(Sequence::File);
8 use FASTA;
9
10 sub old_read {
11   my ( $self, $fh ) = @_;
12
13   my ( $id, $seq, @seqs );
14   while (<$fh>) {
15     chomp;
16     next if /^\s+$/;
17
18     if (s/^>//) {
19       push @seqs, [ $id, $seq ] if $id and $seq;
20       $seq = undef;
21       $id  = $_;
22     } else {
23       $seq .= $_;
24     }
25   }
26   push @seqs, [ $id, $seq ] if $id and $seq;
27
28   for (@seqs) {
29     my $new = FASTA->new( id => ${$_}[0] );
30     $new->seq( split //, ${$_}[1] );
31     $self->add_entries($new);
32   }
33
34   1;
35 }
36
37 sub read {
38   my ( $self, $fh ) = @_;
39   local $/ = "\n>";
40   while (<$fh>) {
41     s/^>//g;
42     s/>$//g;
43
44     my ( $id, @data ) = split /\n/, $_;
45     my $entry = FASTA->new( id => $id );
46     $entry->seq( split //, join( "", @data ) );
47
48     $self->add_entries($entry);
49   }
50
51   1;
52 }
53
54 sub write {
55   my ( $self, $fh ) = @_;
56
57   local $| = 1;
58
59   for ( $self->get_entries ) {
60     my $id  = $_->id;
61     my @seq = $_->seq;
62
63     my $seq = join '', @seq;
64     $seq =~ s/\s*//g;
65     $seq =~ s/(.{72})/$1\n/g;
66
67     print $fh ">$id\n$seq\n";
68   }
69 }
70
71 1;