मैं बड़ी मात्रा में सीवी डेटा आयात करना चाहता हूं (सीधे एआर नहीं, लेकिन कुछ fetches के बाद), और मेरा कोड बहुत धीमा है।सीएसवी आयात को तेज करें
def csv_import
require 'csv'
file = File.open("/#{Rails.public_path}/uploads/shate.csv")
csv = CSV.open(file, "r:ISO-8859-15:UTF-8", {:col_sep => ";", :row_sep => :auto, :headers => :first_row})
csv.each do |row|
#ename,esupp= row[1].split(/_/)
#(ename,esupp,foo) = row[1]..split('_')
abrakadabra = row[0].to_s()
(ename,esupp) = abrakadabra.split(/_/)
eprice = row[6]
eqnt = row[1]
# logger.info("1) ")
# logger.info(ename)
# logger.info("---")
# logger.info(esupp)
#----
#ename = row[4]
#eprice = row[7]
#eqnt = row[10]
#esupp = row[12]
if ename.present? && ename.size>3
search_condition = "*" + ename.upcase + "*"
if esupp.present?
#supplier = @suppliers.find{|item| item['SUP_BRAND'] =~ Regexp.new(".*#{esupp}.*") }
supplier = Supplier.where("SUP_BRAND like ?", "%#{esupp}%").first
logger.warn("!!! *** supp !!!")
#logger.warn(supplier)
end
if supplier.present?
@search = ArtLookup.find(:all, :conditions => ['MATCH (ARL_SEARCH_NUMBER) AGAINST(? IN BOOLEAN MODE)', search_condition.gsub(/[^0-9A-Za-z]/, '')])
@articles = Article.find(:all, :conditions => { :ART_ID => @search.map(&:ARL_ART_ID)})
@art_concret = @articles.find_all{|item| item.ART_ARTICLE_NR.gsub(/[^0-9A-Za-z]/, '').include?(ename.gsub(/[^0-9A-Za-z]/, '')) }
@aa = @art_concret.find{|item| item['ART_SUP_ID']==supplier.SUP_ID} #| @articles
if @aa.present?
@art = Article.find_by_ART_ID(@aa)
end
if @art.present?
@art.PRICEM = eprice
@art.QUANTITYM = eqnt
@art.datetime_of_update = DateTime.now
@art.save
end
end
logger.warn("------------------------------")
end
#logger.warn(esupp)
end
end
यहां तक कि अगर मैं इसे हटा देता हूं और केवल यह प्राप्त करता हूं, तो यह धीमा है।
def csv_import
require 'csv'
file = File.open("/#{Rails.public_path}/uploads/shate.csv")
csv = CSV.open(file, "r:ISO-8859-15:UTF-8", {:col_sep => ";", :row_sep => :auto, :headers => :first_row})
csv.each do |row|
end
end
क्या कोई मुझे fastcsv का उपयोग करके गति बढ़ाने में मदद कर सकता है?
इस गति को प्रभावित नहीं करेगा, लेकिन आप को बंद नहीं कर रहे हैं 'उपयोग File.readlines ("/फ़ाइल ") file'। फिर आपको फ़ाइल खोलने के बारे में चिंता करने की ज़रूरत नहीं है। –
@ वे आपको कौन नहीं समझते हैं, विवरण उदाहरण दे सकते हैं? – byCoder
यदि आप File.open चलाते हैं तो आपको फ़ाइल के करीब होना चाहिए। आप खुली फाइलों को रिसाव नहीं करना चाहते हैं। http://stackoverflow.com/questions/4795447/rubys-file-open-and-the-need-for-f-close –