2017-07-07 15 views
1

私はファイルを開くためにARGVを使用していましたが、私はclunkyのように別のフォルダに入れたいと思っています。ファイルを別のディレクトリに開いてファイルを開く - 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')。first'(' data'ディレクトリに1つのファイルがあると仮定します)? – orde

+0

@ orde良い点。技術的には、 'Dir :: glob'に' ..'を使用することはできますが、それは非常に奇妙な結果があり、理解が難しいです。 – engineersmnky

答えて

0

Dir.globを何をすべきかわからこのエラーが出ますを返す。 最初の要素を取得して開くことができます。

path = Dir.glob('../data/*.txt').first 
    file = File.open(path) 
関連する問題