JPRED-2 Move Jpred 3.0.1 to public Git
[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                 }
23                 else { $seq .= $_ }
24         }
25         push @seqs, [ $id, $seq ] if $id and $seq;
26
27         for (@seqs) {
28                 my $new = FASTA->new(id => ${$_}[0]);
29                 $new->seq(split //, ${$_}[1]);
30                 $self->add_entries($new);
31         }
32
33         1;
34 }
35
36 sub read {
37         my ($self, $fh) = @_;
38         local $/ = "\n>";
39         while (<$fh>) {
40                 s/^>//g;
41                 s/>$//g;
42
43                 my ($id, @data) = split /\n/, $_;
44                 my $entry = FASTA->new(id => $id);
45                 $entry->seq( split //, join("", @data) );
46
47                 $self->add_entries($entry);
48         }
49
50         1;
51 }
52
53 sub write {
54         my ($self, $fh) = @_;
55
56         local $| = 1;
57         
58         for ($self->get_entries) {
59                 my $id = $_->id;
60                 my @seq = $_->seq;
61
62                 my $seq = join '', @seq;
63                 $seq =~ s/\s*//g;
64                 $seq =~ s/(.{72})/$1\n/g;
65
66                 print $fh ">$id\n$seq\n";
67         }
68 }
69
70 1;