2017-11-07 2 views
0

다음 코드는 txt 파일에서 행을 검색하므로 item_price의 모든 값을 내 응용 프로그램에서 사용할 수 있도록 합계합니다.CSV의 행을 합계하는 방법

CSV.foreach(dir, col_sep: "\t", headers: true).map do |row| 

코드 따르십시오 :이 값은 블록에서 검색 할 싶습니다

module ParseText 
    def self.parse 
    require 'csv' 
    dir = Dir.glob("./public/system/file_attaches/files/*/*/*/*/*").max_by {|f| File.mtime(f)} 
    CSV.foreach(dir, col_sep: "\t", headers: true).map do |row| 
     records = row.to_h 
     purchaser = records["purchaser name"] 
     item_description = records["item description"] 
     item_price = records["item price"] 
     purchase_count = records["purchase count"] 
     merchant_address = records["merchant_address"] 
     merchant_name = records["merchant name"] 

     Merchant.create(name: merchant_name) 
     MerchantAddress.create(street: merchant_address, merchant_id: Merchant.last.id) 
     Purchaser.create(name: purchaser, count: purchase_count, merchant_id: Merchant.last.id) 
     Item.create(description: item_description, price: item_price, merchant_id: Merchant.last.id, purchaser_id: Purchaser.last.id) 
    end 
    end 
end 
+0

왜 그냥 사용하지를'TOTAL_PRICE + = item_price' 당신은'정의 경우 TOTAL_PRICE = 0.0'이다. – Anthony

+0

@Anthony가 말한 것은 작동하지만, 블록 외부의 var를 초기화하고 싶지 않으면'# inject'로 결과를 얻을 수 있습니다. 자세한 내용은 내 대답을 참조하십시오. – hoffm

+0

@Anthony, 내가 내가하려고하면 : 문자열은 플로트로 강제 수 없습니다 –

답변

2
CSV.foreach(dir, col_sep: "\t", headers: true).inject(0) do |price_sum, row| 
    # Leave the code you already have here 
    price_sum += item_price.to_i 
end 
+0

Humm ... 나는 시도하지만이 오류가 발생합니다 : 문자열을 Fixnum으로 강제 수 없습니다 –

+0

'item_price'는 문자열이어야합니다. 그것을 float 또는 int로 형변환해야합니다. 코드를 후자로 업데이트하겠습니다. – hoffm

+0

작동하지만 어떻게 price_sum 변수를 블록 밖으로 사용할 수 있습니까? –