Improves handling of non-fiction classification data.
[quanlib.git] / classify / fastset.rb
1
2 class FastSet
3   @@fast_csv_file = 'fast.csv'
4
5   def initialize
6     @entries = {}
7     load!(@@fast_csv_file)
8   end
9
10   def add(id, descr)
11     @entries[id] = descr
12   end
13
14   def has_key?(value)
15     @entries.has_key?(value)
16   end
17
18   def inspect 
19     data = []
20
21     if nil != @entries 
22       data.push('entries=' + @entries.inspect + '') 
23     end
24
25     return '(FastSet:' + data.join(',') + ')'
26   end
27
28   def load!(file_name)
29     first = true
30     @entries = {}
31
32     if ! File.exist?(file_name)
33       puts 'WARNING:  file "' + file_name + '" not found.'
34       return 
35     end
36
37     first = true
38     CSV.open(file_name, 'r:UTF-8') do |csv|
39       csv.to_a.each do |row|
40         if first
41           first = false
42         elsif row.length >= 2
43           id = row[0]
44           descr = row[1]
45           @entries[id] = descr
46         end
47       end
48     end
49   end
50
51   def save(file_name)
52     CSV.open(file_name, 'w:UTF-8') do |csv|
53       csv << [ 'Code', 'Description' ]
54       
55       @entries.keys.sort.each do |key|
56         csv << [ key.to_s, @entries[key].to_s ]
57       end
58     end
59   end
60
61   def save_state
62     save(@@fast_csv_file)
63   end
64 end
65