2015-05-22 19 views
2

我在將文件寫入從Excel取得文件名的特定路徑中遇到了一些麻煩。下面是我使用過程中的運行時間將文件寫入特定路徑的紅寶石從excel中取出文件名稱

out_file = File.new (@temp_path/ "#{obj_info[3].to_s}","w") 

"#{obj_info[3].to_s}" = sample.txt 

sample.txt來自Excel中的代碼

@temp_path = "C:/Users/Somefolder/"

顯示的錯誤是:

NoMethodError: undefined method `[]' for nil:NilClass

然而,如果代碼是:

out_file = File.new ("#{obj_info[3].to_s}","w") 

它在默認目錄中成功創建了一個名爲sample.txt的文件。但是,我希望將其存儲在特定的目錄中,並且需要從Excel傳遞文件名。 任何幫助,非常感謝。

+0

在/和「?@ temp_path /」#{obj_info [3] .to_s} –

回答

0

你有2個問題:

  1. obj_info是零,所以你做了錯誤讀取Excel中的價值,你得到的錯誤指示它是一個陣列上,在您發表這是一個數組的唯一的代碼是從Excel中讀到的東西。 在代碼檢查前打印p obj_info的內容。

  2. @temp_path和{obj_info [3] .to_s}需要連接在一起才能創建路徑。 可以做到這一點與File.join像毛暗示或這樣

    out_file = File.new( 「#{@ temp_path} /#{obj_info [3]}」, 「W」)

在這種情況下,您可以刪除to_s。

如果您發佈了有意義的整個腳本,那將會更好。

+0

Peter之間是否有空格,謝謝您的回覆。事實上,你的答覆沒有temp_path和Obj_info之間的斜線。斜槓給了我一個語法錯誤SyntaxError:unexpected')',期待輸入結束。目前,我正在使用下面,它的作用就像一個魅力。 ** out_file = File.new(「#{@ temp_path}#{obj_info [3]}」,「w」)** – TGR

+0

@TGR所以你在使用字符串插值的時候沒有固定字符串的部分¨Hello#{user}「。它永遠不會讓代碼更具可讀性 –

+0

Sure Mauricio。下次我們會記住這一點,並感謝您的回覆。我相信它也會幫助我。 – TGR

1

我相信你的問題是因爲之間/和

@temp_path/ "#{obj_info[3].to_s} 

,我想你想建立一個路徑。一個空間「

我的建議是,你使用File.join

f_path = File.join(@temp_path,obj_info[3].to_s) 
out_file = File.new (f_path,"w") 

讓我知道如果解決了這個問題