Add support for classification of non-fiction books.
[quanlib.git] / classify / fastset.rb
diff --git a/classify/fastset.rb b/classify/fastset.rb
new file mode 100644 (file)
index 0000000..fa3883e
--- /dev/null
@@ -0,0 +1,63 @@
+
+class FastSet
+  @@fast_csv_file = 'fast.csv'
+
+  def initialize
+    @entries = {}
+    load!(@@fast_csv_file)
+  end
+
+  def add(id, descr)
+    @entries[id] = descr
+  end
+
+  def has_key?(value)
+    @entries.has_key?(value)
+  end
+
+  def inspect 
+    data = []
+
+    if nil != @entries 
+      data.push('entries=' + @entries.inspect + '') 
+    end
+
+    return '(FastSet:' + data.join(',') + ')'
+  end
+
+  def load!(file_name)
+    first = true
+    @entries = {}
+
+    if ! File.exist?(file_name)
+      puts 'WARNING:  file "' + file_name + '" not found.'
+      return 
+    end
+
+    File.open(file_name, 'r:UTF-8').each_line do |line|
+      cols = line.split(/,/)
+      if first
+        first = false
+      elsif cols.length > 1
+        id = cols[0]
+        descr = cols[1]
+        @entries[id] = descr
+      end
+    end
+  end
+
+  def save(file_name)
+    File.open(file_name, 'w:UTF-8') do |fd|
+      fd.puts('Code,Description')
+      
+      @entries.keys.sort.each do |key|
+        fd.puts(key.to_s + ',' + @entries[key].to_s)
+      end
+    end
+  end
+
+  def save_state
+    save(@@fast_csv_file)
+  end
+end
+