में फ़ाइल पथ से एक्सटेंशन के बिना फ़ाइल नाम कैसे प्राप्त करें रूबी में फ़ाइल पथ से फ़ाइल नाम कैसे प्राप्त कर सकता हूं?रूबी
उदाहरण के लिए यदि मेरे पास "C:\projects\blah.dll"
का पथ है और मुझे बस "ब्लै" चाहिए।
क्या रूबी में LastIndexOf
विधि है?
में फ़ाइल पथ से एक्सटेंशन के बिना फ़ाइल नाम कैसे प्राप्त करें रूबी में फ़ाइल पथ से फ़ाइल नाम कैसे प्राप्त कर सकता हूं?रूबी
उदाहरण के लिए यदि मेरे पास "C:\projects\blah.dll"
का पथ है और मुझे बस "ब्लै" चाहिए।
क्या रूबी में LastIndexOf
विधि है?
require 'pathname'
Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>
मैं एक लंबे समय में एक विंडोज़ प्रयोक्ता नहीं किया गया है, लेकिन पथ नाम rdoc कहते हैं कि यह विंडोज पर निर्देशिका-नाम विभाजक के साथ कोई समस्या नहीं है।
मुझे नहीं पता कि यह # 1 रैंकिंग उत्तर क्यों है जब File.basename को 'पथनाम' की अतिरिक्त 'आवश्यकता' की आवश्यकता नहीं है। – GroovyCakes
कक्षा 'पथनाम' स्थानीय पथनामों के साथ काम करता है जबकि 'फाइल' हमेशा यूनिक्स पथनाम मानता है (अंतर पथ और ड्राइव विभाजक हैं जो एमएस विंडोज़ में उपयोग किए जाते हैं, उदाहरण के लिए) – nimrodm
@ कोर्च: आपको शायद' पथनाम 'नया ("सी:/कुछ/पथ" का अलग व्यवहार दिखाना चाहिए) .basename' to file.basename ("सी:/कुछ/पथ") '(निमोडोड से टिप्पणी देखें) –
रिटर्न फाइल नाम file_name में दी गई है, जो आगे स्लैश का उपयोग कर का गठन किया जाना चाहिए (``/'') स्थानीय फाइल सिस्टम पर इस्तेमाल किया विभाजक की परवाह किए बिना के अंतिम घटक का प्रयास करें। यदि प्रत्यय दिया गया है और 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"
लिनक्स और रूबी के साथ 1.8 मैं 'pathname.new (" कुछ/पथ/से/my.file ") का प्रयास करें। बेसनाम 'और' my.file /': '( –
अधिक सामान्य रूप से,' File.basename ("C : \\ परियोजनाएं \\ blah.dll ","। * ") # =>" blah "' – kelloti
ध्यान दें कि दोहरे उद्धरण चिह्नों तार से बचने के '\ रों।
'C:\projects\blah.dll'.split('\\').last
पथ के बजाए इसे स्ट्रिंग के रूप में पूरी तरह से मानता है, कोड को कम पोर्टेबल बनाता है। – boatcoder
जोनाथन का जवाब बेहतर है, लेकिन क्या आप जानते हैं 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"
समस्या यह है कि आप यह जानने की ज़रूरत है कि यह बैकस्लैश है या आगे की ओर –
मामले में विस्तार से ज्ञात नहीं है (यह/विभाजक की जरूरत है):
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.basename() जवाब है! – sivabudh
आप ENV चर के लिए उपयोग किया है, तो scan
इस छोटे regex (जो पिछले लेकिन एक शब्द पाता है के साथ संयुक्त, एक जाहिर है
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
, आप scan
और किसी भी पथ नाम है कि फ़ाइल नाम भी शामिल है पर regex का उपयोग कर सकते हैं और __FILE__
स्पष्ट है: डॉट, तो स्ट्रिंग के अंतिम शब्द) 'फ़ाइल नाम' में फ़ाइल का नाम रखा जाएगा पसंद:
__FILE__.scan(/\w+\.\w+$/)
Jonathan Lonowski पूरी तरह से उत्तर दिया, लेकिन वहाँ कुछ है कि जवाब में से कोई भी यहाँ उल्लेख किया है। File::extname
के बजाय, आप फ़ाइल नाम प्राप्त करने के लिए सीधे '.*'
का उपयोग कर सकते हैं।
File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah"
लेकिन, आप किसी भी विशिष्ट एक्सटेंशन फ़ाइलेंके आधार फ़ाइल नाम प्राप्त करना चाहते हैं, तो आपको File::extname
उपयोग करने के लिए, की जरूरत नहीं है अन्यथा।
प्रयास करें एक डॉट कुछ के बाद के बारे में कुछ खास नहीं है कि ध्यान में रखें (तीन, शायद) वर्ण। वे फ़ाइल के नाम का हिस्सा हैं। कुछ फ्रिंज ऑपरेटिंग सिस्टम सोचते हैं कि फ़ाइल नाम के उस हिस्से के बारे में कुछ खास है, लेकिन आपको उस जाल में नहीं आना चाहिए। –