मैं रूबी में फ़ाइल पथ से फ़ाइल नाम कैसे प्राप्त कर सकता हूं?
उदाहरण के लिए अगर मेरे पास एक रास्ता है "C:\projects\blah.dll"और मैं सिर्फ "ब्ला" चाहता हूं।
क्या LastIndexOfरूबी में एक विधि है?
मैं रूबी में फ़ाइल पथ से फ़ाइल नाम कैसे प्राप्त कर सकता हूं?
उदाहरण के लिए अगर मेरे पास एक रास्ता है "C:\projects\blah.dll"और मैं सिर्फ "ब्ला" चाहता हूं।
क्या LastIndexOfरूबी में एक विधि है?
जवाबों:
require 'pathname'
Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>
मैं लंबे समय से विंडोज उपयोगकर्ता नहीं रहा हूं, लेकिन Pathname rdoc का कहना है कि इसमें विंडोज पर डायरेक्टरी-नाम सेपरेटर के साथ कोई समस्या नहीं है।
pathnameस्थानीय लोकनामों के साथ काम करती है जबकि Fileहमेशा यूनिक्स पाथनेम्स मानती है (अंतर पथ और ड्राइव विभाजक हैं जो एमएस विंडोज में उपयोग किए जाते हैं, उदाहरण के लिए)
प्रयत्न File.basename
फ़ाइल_नाम में दिए गए फ़ाइलनाम के अंतिम घटक को लौटाता है, जिसे स्थानीय फ़ाइल सिस्टम पर उपयोग किए गए विभाजक की परवाह किए बिना फॉरवर्ड स्लैश (`` / '') का उपयोग करके बनाया जाना चाहिए। यदि प्रत्यय दिया गया है और file_name के अंत में मौजूद है, तो इसे हटा दिया जाता है।
File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
आपके मामले में:
File.basename("C:\\projects\\blah.dll", ".dll") #=> "blah"
Pathname.new("some/path/to/my.file").basenameऔर मिलता हूं my.file/: '(
File.basename("C:\\projects\\blah.dll", ".*") #=> "blah"
/my/file.tar.gz?
मामले में विस्तार ज्ञात नहीं है (इसे / विभाजक की आवश्यकता है):
irb(main):024:0> f = 'C:\foobar\blah.txt'.gsub("\\","/")
=> "C:/foobar/blah.txt"
irb(main):027:0> File.basename(f,File.extname(f))
=> "blah"
जोनाथन लोनोवस्की ने पूरी तरह से उत्तर दिया, लेकिन कुछ ऐसा है जो यहां वर्णित किसी भी उत्तर में नहीं है। इसके बजाय File::extname, आप '.*'फ़ाइल नाम प्राप्त करने के लिए सीधे उपयोग कर सकते हैं ।
File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah"
लेकिन, यदि आप किसी विशिष्ट एक्सटेंशन फ़ाइलों का आधार फ़ाइल नाम प्राप्त करना चाहते हैं , तो आपको उपयोग करने की आवश्यकता है File::extname, अन्यथा नहीं।
इस कोड को आज़माएं
उपयोग extname
File.basename("a/b/d/test.rb", File.extname("a/b/d/test.rb")) #=> "test"
जोनाथन का जवाब बेहतर है, लेकिन आपको बता दें कि उपलब्ध नोटिस में somelist[-1]से एक LastIndexOfहै।
जैसा कि krusty.ar ने somelist.lastस्पष्ट रूप से उल्लेख किया है।
irb(main):003:0* f = 'C:\\path\\file.txt'
irb(main):007:0> f.split('\\')
=> ["C:", "path", "file.txt"]
irb(main):008:0> f.split('\\')[-1]
=> "file.txt"
ध्यान दें कि दोहरे उद्धरण तार से बच जाते हैं।
'C:\projects\blah.dll'.split('\\').last
File.basename। और, कुछ अन्य उत्तरों की तरह, ओपी के प्रश्न का उत्तर नहीं देता है।
यदि आपके पास ENV चर तक पहुंच है, तो scanइस छोटे से रेगेक्स के साथ संयुक्त (जो अंतिम लेकिन एक शब्द, एक डॉट, फिर स्ट्रिंग का अंतिम शब्द पाता है) फ़ाइल का नाम 'फ़ाइलनाम' में डाल देगा:
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
स्पष्ट रूप से, आप scanकिसी भी पथ नाम पर फ़ाइल नाम का उपयोग कर सकते हैं और regex, और __FILE__स्पष्ट विकल्प है:
__FILE__.scan(/\w+\.\w+$/)