From: stang stang Date: 2012-05-05T01:52:14+09:00 Subject: how to refactor these codes ,could you help me! hi,these codes is my working codes recently.I am not satisfied with the codes for too much repeated codes,I try to reduce duplex codes but failed. I think DZHFileProperty and HXFileProperty concentrate all file property , that could not be changed. I find that if codes below could be refactor module DzhSelfStockFile module HxSelfstockFile DzhFileProperty include HxFileProperty | | | | \ / \ / module SelfStockFile include FileProperty(dynamic include according arg Hx or Dzh) merge DZHBlock HxBlock to Block, merge DzhSelfStockFile HxSelfStockFile to SelfStockFile . but i canot to dynamic incluce module according to argument.could you help me ,thank you ! module DzhFileProperty def initialize() @file="d:\\ProgramFiles\\DZH\\userdata\\block\\自选股.BLK" @start="\245\000Q\377" @internal="\000\000\000\000" @backup_file=@file+".tmp" @code_regular_expression=/S[H|Z]\d{6}/ end def after_read_each(stock) return stock end def before_yield_each(stock) return stock end end module DzhSelfStockFile include DzhFileProperty def initialize super end def display open(@file,'rb').each { |x| p x} end def backup open(@backup_file,'wb') {|f| f<< read} end def restore open(@file,'wb') {|f| f<< read_backup} end def clean_zero puts "@file = nil" if (@file==nil) open(@file,'wb') {|f| f<< @start} end def read IO.read(@file) end def read_backup IO.read(@backup_file) end def codes @codes=[] read.scan(@code_regular_expression).each do |w| @codes<<(after_read_each w) end @codes.sort.uniq end def write(stock) write_array_of [stock] end def write_array_of(stocks) add_stocks_string=yield_all_string stocks open(@file,'wb') {|f| f << add_stocks_string;f.flush} end def del(stock) stockArray=codes.delete_if {|x| x==stock} open(@file,'wb'){|f| f << (yield_string stockArray)} end def yield_all_string(stocks) yield_string (codes+stocks).sort.uniq end def yield_string(stocks) stocks_string=@start stocks.sort.uniq.each do |stock| stocks_string+=(before_yield_each(stock)+@internal) end end private :yield_all_string,:yield_string end class DzhBlock include DzhSelfStockFile def initialize super end def clean clean_zero end def have codes end def add(stock) add_batch [stock] end def add_batch(stocks) write_array_of stocks end def del(stock) super stock end end ============================================================== module HxFileProperty def initialize @file="D:\\ProgramFiles\\hxzq\\T0002\\blocknew\\ZXG.blk" @start="" @internal="\r\n" @backup_file=@file+".tmp" @code_regular_expression=/\d{7}/ end def after_read_each(stock) return stock="SH"+stock[1,7] if stock[0,1]=="1" return stock="SZ"+stock[1,7] if stock[0,1]=="0" end def before_yield_each(stock) return stock="1"+stock[2,6] if stock[0,2]=="SH" return stock="0"+stock[2,6] if stock[0,2]=="SZ" end end module HxSelfstockFile include HxFileProperty def initialize super end def display open(@file,'rb').each { |x| p x} end def backup open(@backup_file,'wb') {|f| f<< read} end def restore open(@file,'wb') {|f| f<< read_backup} end def clean_zero puts "@file = nil" if (@file==nil) open(@file,'wb') {|f| f<< @start} end def read IO.read(@file) end def read_backup IO.read(@backup_file) end def codes @codes=[] read.scan(@code_regular_expression).each do |w| @codes<< (after_read_each w ) end @codes.sort.uniq end def write(stock) write_array_of [stock] end def write_array_of(stocks) add_stocks_string=yield_all_string stocks open(@file,'wb') {|f| f << add_stocks_string;f.flush} end def del(stock) stockArray=codes.delete_if {|x| x==stock} open(@file,'wb'){|f| f << (yield_string stockArray)} end def yield_all_string(stocks) yield_string (codes+stocks).sort.uniq end def yield_string(stocks) stocks_string=@start stocks.sort.uniq.each do |stock| stocks_string+=(before_yield_each(stock)+@internal) end stocks_string end private :yield_all_string,:yield_string end class HxBlock include HxSelfstockFile def initialize super end def clean clean_zero end def have codes end def add(stock) add_batch [stock] end def add_batch(stocks) write_array_of stocks end def del(stock) super stock end end -- Posted via http://www.ruby-forum.com/.