4 May 2012 18:52
how to refactor these codes ,could you help me!
stang stang <lists <at> ruby-forum.com>
2012-05-04 16:52:14 GMT
2012-05-04 16:52:14 GMT
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()
<at> file="d:\\ProgramFiles\\DZH\\userdata\\block\\自选股.BLK"
<at> start="\245\000Q\377"
<at> internal="\000\000\000\000"
<at> backup_file= <at> file+".tmp"
<at> 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( <at> file,'rb').each { |x| p x}
end
def backup
open( <at> backup_file,'wb') {|f| f<< read}
end
def restore
open( <at> file,'wb') {|f| f<< read_backup}
end
def clean_zero
puts " <at> file = nil" if ( <at> file==nil)
open( <at> file,'wb') {|f| f<< <at> start}
end
def read
IO.read( <at> file)
end
def read_backup
IO.read( <at> backup_file)
end
def codes
<at> codes=[]
read.scan( <at> code_regular_expression).each do |w|
<at> codes<<(after_read_each w)
end
<at> 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( <at> file,'wb') {|f| f << add_stocks_string;f.flush}
end
def del(stock)
stockArray=codes.delete_if {|x| x==stock}
open( <at> 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= <at> start
stocks.sort.uniq.each do |stock|
stocks_string+=(before_yield_each(stock)+ <at> 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
<at> file="D:\\ProgramFiles\\hxzq\\T0002\\blocknew\\ZXG.blk"
<at> start=""
<at> internal="\r\n"
<at> backup_file= <at> file+".tmp"
<at> 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( <at> file,'rb').each { |x| p x}
end
def backup
open( <at> backup_file,'wb') {|f| f<< read}
end
def restore
open( <at> file,'wb') {|f| f<< read_backup}
end
def clean_zero
puts " <at> file = nil" if ( <at> file==nil)
open( <at> file,'wb') {|f| f<< <at> start}
end
def read
IO.read( <at> file)
end
def read_backup
IO.read( <at> backup_file)
end
def codes
<at> codes=[]
read.scan( <at> code_regular_expression).each do |w|
<at> codes<< (after_read_each w )
end
<at> 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( <at> file,'wb') {|f| f << add_stocks_string;f.flush}
end
def del(stock)
stockArray=codes.delete_if {|x| x==stock}
open( <at> 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= <at> start
stocks.sort.uniq.each do |stock|
stocks_string+=(before_yield_each(stock)+ <at> 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/.
RSS Feed