2017-07-07 55 views
1

我一直在使用ARGV來打開文件,但我覺得它笨重,我想讓他們在不同的文件夾中。在不同的目錄中打開文件來讀取行 - ruby​​

我想打開我的talk_parser.rb中的input.txt文件,我也不想硬編碼文件名。

我的目錄(pwd是賓)

├── bin 
│ └── talk_parser.rb 
└── data 
    └── input.txt 

試圖

x = Dir.glob('../data/*.txt').to_s 
file = File.open(File.expand_path(x)) 

,但我得到這個錯誤

talk_parser.rb:34:in `initialize': 
No such file or directory @ rb_sysopen - /home/huvi/Desktop/test/bin/["../data/input.txt"] (Errno::ENOENT) 
from talk_parser.rb:34:in `open' 
from talk_parser.rb:34:in `<main>' 

不知道該怎麼辦

+1

'Dir#glob'返回'Array'。在這種情況下,你的'Array'將是「/ home/huvi/Desktop/test/data /」中的每個「* .txt」文件,因此對於初學者來說,你應該循環這些文件。如果你只想要第一個,那麼把你的第一行'to_s'改成'first'。現在你在'Array'上調用'to_s',因此你的輸出''[「../ data/input.txt」]'' – engineersmnky

+0

你可以在'Dir :: glob'中使用'..'嗎?或者它應該是'x = Dir.glob('**/data/*。txt')。第一個'(假設'data'目錄中有一個文件)? – orde

+0

@或好點。技術上你可以在'Dir :: glob'中使用'..',雖然它有很奇怪的結果,我很難理解 – engineersmnky

回答

0

Dir.glob返回Array。 你可以得到第一個元素並打開它:

path = Dir.glob('../data/*.txt').first 
    file = File.open(path) 
相關問題