2017-04-20 118 views
0

我正在嘗試創建一個程序來計算我創建的文本文件中的詞頻。我有名爲moms_letter.txt一個文本文件,這是我的代碼:在Ruby中打開文本文件

word_count = {} 

File.open("moms_letter.txt", "r") do |f| 
    f.each_line do |line| 
     words = line.split(' ').each do |word| 
      word_count[word] += 1 if word_count.has_key? word 
      word_count[word] = 1 if not word_count.has_key? word 
     end 
    end 
end 

puts word_count 

我得到的問題是,當我去運行該文件,我得到的錯誤:

there is no such file or directory - moms_letter.txt (Errno: : ENOENT) 

不明白爲什麼這是在創建文本文件時發生的。 任何幫助表示讚賞。

我也是Ruby的新手,所以感謝耐心。

回答

0

我對Ruby還是比較新的,但最近有一些文本文件。這可能看起來像是一個明顯的問題,但是您試圖在.rb文件所在的目錄中打開的文本文件是什麼?否則,你需要包含它的相對路徑。

爲了排查故障,請嘗試File.new("temp.txt", "w"),然後File.open("temp.txt", "r")以查看是否有效。然後你會知道這是否是你的代碼或你試圖訪問的txt文件的問題。

還使用File.exists?("moms_letter.txt")將幫助您確定您是否可以從.rb腳本中訪問該文件。

希望有幫助!

+0

我很確定它在同一個目錄中,因爲這兩個文件都在同一個文件夾中。也許這是我的問題。 – Patrick

+0

我最終確定了這一點,但現在我試圖弄清楚是否有辦法按照從最大到最小的順序列出特定單詞的頻率。所以基本上現在它只是列出了單詞的出現次數,但是,我希望它們根據出現次數來列出。你知道一個辦法嗎? – Patrick

+0

這是一個常見的技術面試白板問題,所以我真的應該爲你準備好一個快速的答案,但我不知道。我認爲最好的方法是創建一個散列,然後遍歷文檔並將該單詞作爲關鍵字。然後增加每個單詞出現的值。然後你可以按值排序散列。希望有所幫助! –

1

您必須從您的moms_letter.txt文件所在的目錄之外執行程序。您需要使用絕對路徑來打開您的文件。或者,始終從.txt所在的目錄執行程序。所以,而不是使用"moms_letter.txt"去與"complete/path/to/file/moms_letter.txt"

+0

我能夠通過File.open找到我的文件(File.join(File.dirname(__ FILE__),'moms_letter'),'r')do | f |' – Patrick

+0

現在我試圖找出是否存在從最大到最小的順序列出特定單詞的頻率。所以基本上現在它只是列出文本文件中出現的單詞,但是,我希望它們根據出現次數來列出。你知道一個辦法嗎? – Patrick

+0

太棒了!好得多,你的代碼將以這種方式移植。 – Gerry