2011-10-18 20 views
0

ファイルパスを分割してファイル名を取得する際に問題が発生しています。ここでDIRにファイルパスをドロップ

は私のコードです:

file=File.new("files.txt", "w") 
file_list=Dir["../path/*txt"] 

file.puts file_list 

私はそれを分割するには、いくつかの異なる方法を試してみましたが、私はアレイエラーを得続ける、

よろしく、

AZCards

+0

'files.txt'の内容は何ですか?指定されたすべてのファイルの内容(あなたの場合は '* .txt')が1つの大きな結果ファイルにマージされるのでしょうか? – WarHog

+0

Files.txtには、そのディレクトリに.txtという末尾のファイルのリストが含まれています。実際には、これらのファイルのファイル名が必要です。 – azcards

+0

「アレイエラー」はいつどのようになるのですか? – inger

答えて

2

このスニペットを試してください:

file = File.new("files.txt", "w") 
Dir['../path/*.txt'].each { |f| file.puts File.basename(f, '.txt') } 

これは、 'txt'拡張子を持たない指定されたフォルダ内のファイル名のリストを提供します。

+0

完璧、ありがとう! – azcards

0
file=File.new("files.txt", "w") 
Dir.entries("/path/to/directory").each do |path| 
    m = /([^\/]+)\.txt$/.match(path) 
    file.puts m[1] if m 
end 
0

basenameを使用して完全なパスのリストをマップすると、裸のファイル名のリストが生成されます。 拡張子を削除することができます:

file = File.new("files.txt", "w") 
file_list = Dir["../path/*txt"].map {|f| File.basename f, '.txt'} 

file.puts file_list 
+0

これもうまくいきましたが、ファイル拡張子はそのままで、代わりにWarHogを使用しました。しかし、ありがとう! – azcards

+0

あなたはどちらのRubyを使っていますか? MRIはファイル拡張子を保持しません。実際、File.basenameコールはWarHogのソリューションと同じです。 – inger