好了,第一個問題:
一個)的文件名會在每次運行不同的(我假定這將永遠是一個CSV文件,對吧?)
你可以通過創建一個文件夾,說你的Ruby腳本中的input_data解決這個問題。然後執行:
Dir.glob('input_data/*.csv')
這將生成一個以CSV結尾的文件夾內的所有文件的數組。如果我們假設會出現在該文件夾的時間(使用不同的名稱)只有1個文件,我們可以這樣做:
file_name = Dir.glob('input_data/*.csv')[0]
這樣你會動態獲取的文件路徑,無論該文件是什麼命名。如果CSV文件是相同的目錄中的Ruby腳本中,你可以這樣做:
Dir.glob('*.csv')[0]
現在,進口只有1列到一個Ruby陣列(讓我們假設它是第一列):
require 'csv'
array = []
CSV.foreach(file_name) do |csv_row|
array << csv_row[0] # [0] for the first column, [1] for the second etc.
end
如果您的CSV文件包含標頭,該怎麼辦?假設你的列名是'Total'。你可以這樣做:
require 'csv'
array = []
CSV.foreach(file_name, headers: true) do |csv_row|
array << csv_row['Total']
end
現在,如果你的列是第一列不要緊,第三等,只要它有一個名爲「總計」欄頭,紅寶石會發現它。
CSV.foreach逐行讀取文件,適用於大文件。 CSV.read將立即讀取,但使用它可以使您的代碼更加簡潔:
array = CSV.read(, headers: true).map do |csv_row|
csv_row['Total']
end
希望這對我有所幫助。
要求輸入的程序通常是非常煩人的。爲什麼不讓文件名成爲命令行參數?這些都可以在'ARGV'中找到。 – tadman 2014-09-23 19:01:54
如果該文件(無關緊要)將成爲程序文件夾中唯一的csv文件,則可以使用Dir.glob(「*。csv」)[0]。這樣你就不必擔心這個名字會一直在改變。 – daremkd 2014-09-23 19:19:07