আমি রুবির ফাইল পাথ থেকে কীভাবে ফাইলের নাম পেতে পারি?
উদাহরণস্বরূপ যদি আমার কোনও পথ থাকে "C:\projects\blah.dll"
এবং আমি কেবল "বেলা" চাই।
LastIndexOf
রুবিতে কি কোনও পদ্ধতি আছে?
আমি রুবির ফাইল পাথ থেকে কীভাবে ফাইলের নাম পেতে পারি?
উদাহরণস্বরূপ যদি আমার কোনও পথ থাকে "C:\projects\blah.dll"
এবং আমি কেবল "বেলা" চাই।
LastIndexOf
রুবিতে কি কোনও পদ্ধতি আছে?
উত্তর:
require 'pathname'
Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>
আমি দীর্ঘদিন ধরে উইন্ডোজ ব্যবহারকারী হইনি, তবে প্যাথনাম rdoc বলছে উইন্ডোজে ডিরেক্টরি-নাম বিভাজক নিয়ে এটির কোনও সমস্যা নেই।
pathname
করার সময় স্থানীয় pathnames সাথে কাজ করে File
(পার্থক্য নেই পাথ এবং ড্রাইভ বিভাজক যা মাইক্রোসফট উইন্ডোজ ব্যবহার করা হয় উদাহরণস্বরূপ) সবসময় ইউনিক্স pathnames অনুমান
চেষ্টা File.basename
স্থানীয় ফাইল সিস্টেমে ব্যবহৃত বিভাজন নির্বিশেষে ফাইল_নামে দেওয়া ফাইলনামের সর্বশেষ উপাদানটি ফেরত দেয় যা অবশ্যই ফরওয়ার্ড স্ল্যাশ (`` / '') ব্যবহার করে গঠন করা উচিত। প্রত্যয়টি যদি ফাইল_নামের শেষে দেওয়া হয় এবং উপস্থিত হয় তবে তা সরিয়ে ফেলা হবে।
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
স্বরলিপি।
ক্রাস্টি.আর হিসাবে উল্লিখিত হিসাবে 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
। এবং অন্যান্য উত্তরগুলির মতো, ওপি-র প্রশ্নের উত্তর দেয় না।
আপনার যদি scan
এই এনভিভি ভেরিয়েবলগুলিতে অ্যাক্সেস থাকে তবে এই ছোট্ট রেইগেক্সের সাথে মিলিত (যা শেষটি কিন্তু একটি শব্দ, একটি বিন্দুর সন্ধান করে) তবে স্ট্রিংয়ের শেষ শব্দটি ফাইলটির নাম 'ফাইলের নাম' এ রাখবে:
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
স্পষ্টতই, আপনি ব্যবহার করতে পারেন scan
এবং ফাইলের নাম অন্তর্ভুক্ত যে কোনও পাথের নামতে রেজিএক্স, এবং __FILE__
এটি সুস্পষ্ট পছন্দ:
__FILE__.scan(/\w+\.\w+$/)
আপনি এটির সাথে বর্তমান স্ক্রিপ্টের ডিরেক্টরি পথ পেতে পারেন:
File.dirname __FILE__
File.basename __FILE__