2012-10-31 5 views
-1

나는 문자열처럼이 :빠르고 깨끗한 방법은 경로로 문자열을 분할하는

str = "/some/path/to/some/file.ext" 

결과는해야 같은 :

[path, dir, file] 
=> ["/some/path/to", "some", "file.ext"] 

내 현재 코드 :

chunks = str.split '/' 
=> ["", "some", "path", "to", "some", "file.ext"] 

file = chunks.pop 
=> "file.ext" 

dir = chunks.pop 
=> "some" 

path = chunks.join '/' 
=> "/some/path/to" 

하지만 추하고 느립니다.

정규 표현식과 File.split도 시도했지만 더 엉망입니다.

해결책은 무엇입니까?

답변

4

사용 pathname는 :

require 'pathname' 

str = "/some/path/to/some/file.ext" 

p = Pathname.new str 

path, dir, file = [p.dirname.parent, p.parent.basename, p.basename].map(&:to_s) 

p([path, dir, file]) 

그것은 모든 버전에 큰 실행됩니다.

Here you can see it in action.

+0

깔끔하고 감사합니다. cibox를 생각하면 멋져 보입니다. 솔직히 말해서, 어제 나는 Ruby를 위해 이런 서비스를 갖는 것이 좋을지에 대한 질문을 덧붙였다. 누군가 ideone을 추천했지만 나는 그것을 싫어합니다. 고맙습니다 –

관련 문제