28a5730ece2f0bb5cf8932f79c64b67c2d6e6096
[jalview.git] / forester / ruby / evoruby / lib / evo / io / parser / uniprot_parser.rb
1 #
2 # = lib/evo/io/parser/uniprot_parser - UniprotParser class
3 #
4 # Copyright::  Copyright (C) 2012 Christian M. Zmasek
5 # License::    GNU Lesser General Public License (LGPL)
6 #
7 # $Id:  Exp $
8 #
9 # last modified: 121003
10
11
12 #require 'iconv'
13
14
15 require 'lib/evo/util/util'
16
17 module Evoruby
18
19   class UniprotParser
20
21     ID = "ID"
22     DE = "DE"
23     DR = "DR"
24     LAST = '//'
25
26     def initialize file
27       Util.check_file_for_readability file
28       @file = file
29     end
30
31    
32
33     def parse( ids )
34       #ic = Iconv.new( 'UTF-8//IGNORE', 'UTF-8' )
35       entries = []
36       de = []
37       dr = []
38       read = false
39       File.open( @file ).each do | line |
40         if line.index ID == 0
41           ids.each do | id |
42             if line.index id == 0
43               read = true
44               break
45             end
46           end
47         end
48         if read
49           if line.index LAST == 0
50             read = false
51             e = UniprotEntry.new
52             e.de = de
53             e.dr = dr
54             entries << e
55             de = []
56             dr = []
57           else
58             if line.index DE == 0
59               add( line, de )
60             elsif line.index DR == 0
61               add( line, dr )
62             end
63           end
64         end
65       end
66       entries
67     end
68
69     private
70
71     def add( line, ary )
72       line =~/[A-Z]{2}\s+(.+)/
73       ary << $1
74     end
75
76
77   end # class UniprotParser
78
79   class UniprotEntry
80
81     attr_accessor :id
82     attr_accessor :ac
83     attr_accessor :de
84     attr_accessor :gn
85     attr_accessor :os
86     attr_accessor :ox
87     attr_accessor :dr
88     attr_accessor :pe
89     attr_accessor :kw
90
91   end
92
93
94 end # module Evoruby