2011-10-18 2 views
0

파일 경로를 분할하고 파일 이름을 가져 오는 데 문제가 있습니다. 여기 DIR에 파일 경로 놓기

내 코드입니다 :
file=File.new("files.txt", "w") 
file_list=Dir["../path/*txt"] 

file.puts file_list 

내가 그것을 분할하는 몇 가지 방법을 시도,하지만 난 배열에 오류가 계속,

최고 감사합니다,

AZCards

+0

'files.txt'의 내용은 무엇입니까? 그것은 지정된 모든 파일의 내용 ('* .txt'귀하의 경우) 하나의 큰 결과 파일로 병합해야합니까? – WarHog

+0

Files.txt에는 그 디렉토리에 .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

어떤 루비를 사용하고 있습니까? MRI는 파일 확장자를 유지하지 않습니다. 실제로 File.basename 호출은 WarHog의 솔루션과 같습니다. – inger

관련 문제