আজ আপনি শিখবেন রুবিতে ফাইল কীভাবে পড়া এবং লেখা যাতে আপনি কন্টেন্ট এক্সট্রাক্ট করতে পারেন, নতুন ফাইল তৈরি করতে পারেন, এবং আপনার প্রয়োজনীয় ইনফরমেশন খুঁজে বের করতে পারেন!

এখানে আমরা কী কভার করব:
সামগ্রী
- ১ রুবিতে ফাইল কীভাবে পড়বেন
- ২ রুবিতে ফাইলে কীভাবে লিখবেন
- ৩ রুবি File মেথডস
- ৪ ডিরেক্টরি অপারেশন
- ৫ FileUtils মডিউল কীভাবে ব্যবহার করবেন
- ৬ সারাংশ
- ৬.১ রিলেটেড
চলুন শুরু করি!
রুবিতে ফাইল কীভাবে পড়বেন
আপনি রুবিতে একটি ফাইল এভাবে পড়তে পারেন:
- ফাইলটি খুলুন,
openমেথড দিয়ে। - ফাইলটি পড়ুন, পুরো ফাইল, লাইন বাই লাইন, বা নির্দিষ্ট পরিমাণ বাইট।
- ফাইলটি বন্ধ করুন,
closeমেথড দিয়ে।
প্রক্রিয়াটি বিস্তারিত।
File ক্লাস ব্যবহার করে একটি ফাইল খুলুন:
file = File.open("users.txt")
ফলস্বরূপ আপনি একটি File অবজেক্ট পাবেন, কিন্তু ফাইলের কন্টেন্ট এখনো পাবেন না।
এখন:
আপনি ফাইলের কন্টেন্ট তিনভাবে পড়তে পারেন।
প্রথম, আপনি পুরো ফাইলটি পড়তে পারেন।
যেন:
file_data = file.read # "user1\nuser2\nuser3\n"
আপনি যদি একটি মাল্টি-লাইন ফাইল সাথে কাজ করছেন তবে আপনি হয় file_data-কে split করতে পারেন, অথবা readlines মেথড প্লাস chomp মেথড ব্যবহার করে নিউলাইন ক্যারেক্টারগুলো রিমুভ করতে পারেন।
উদাহরণ:
file_data = file.readlines.map(&:chomp) # ["user1", "user2", "user3"]
আপনি যখন একটি ফাইলের সাথে কাজ শেষ করবেন তবে আপনি এটিকে close করবেন মেমরি এবং সিস্টেম রিসোর্স মুক্ত করার জন্য।
যেন:
file.close
ফাইল খুলে এবং বন্ধ করতে হয় সেটি এড়ানোর অল্টারনেটিভ হিসেবে, আপনি File.read মেথড ব্যবহার করতে পারেন:
file_data = File.read("user.txt").split # ["user1", "user2", "user3"]
ফাইল পড়ার বিষয়ে একটা আরো টিপ।
আপনি যদি একটি ফাইল এক লাইন করে প্রসেস করতে চান তবে আপনি foreach মেথড ব্যবহার করতে পারেন।
উদাহরণ:
File.foreach("users.txt") { |line| puts line }
পুরো ফাইল মেমরিতে লোড করার বদলে আপনি ফাইলটি এক লাইন করে প্রসেস করতে পারবেন, যা বড় ফাইলের জন্য উপকারী।
রুবিতে ফাইলে কীভাবে লিখবেন
আপনি যদি রুবি ব্যবহার করে একটি ফাইলে লিখতে চান:
- ফাইলটি রাইট মোডে খুলুন (“w” ফ্ল্যাগ)
- ফাইলে ডেটা যোগ করতে
writeমেথড ব্যবহার করুন - আপনি যদি ব্লক ভার্শন ব্যবহার না করেন তবে মনে রাখবেন
closeকরতে
উদাহরণ:
File.open("log.txt", "w") { |f| f.write "#{Time.now} - User logged in\n" }
গুরুত্বপূর্ণ:
এটি পূর্বের ফাইল কন্টেন্ট রিরাইট করবে!
আপনি যদি ফাইলে নতুন কন্টেন্ট যোগ করতে চান তবে “a” (append) ফ্ল্যাগ ব্যবহার করুন, “w” (write) ফ্ল্যাগের বদলে।
একটি শর্টকাট হলো File.write ব্যবহার করা:
File.write("log.txt", "data...")
এই মেথডটি অ্যাপেন্ড মোডে ব্যবহার করতে:
File.write("log.txt", "data...", mode: "a")
এটিই হলো রুবিতে ফাইলে লেখার সবচেয়ে সহজ পদ্ধতি শুধু এক লাইন কোডে 🙂
একটা আরো জিনিস…
আপনি যদি একটি অ্যারে ফাইলে লিখতে চান তবে আপনাকে সেটিকে আগে স্ট্রিংতে কনভার্ট করতে হবে।
পদ্ধতি:
File.write("log.txt", [1,2,3].join("\n"), mode: "a")
এই প্রসেস যেটি একটি অবজেক্টকে স্ট্রিংতে কনভার্ট করে তাকে সিরিয়ালাইজেশন বলা হয়।
রুবি File মেথডস
আপনি ফাইল সাথে পড়া এবং লেখা ছাড়াও আরও কিছু করতে পারেন।
উদাহরণস্বরূপ, আপনি জানতে চাইতে পারেন একটি ফাইল এক্সিস্ট করে কিনা বা কারেন্ট ডিরেক্টরির ফাইল লিস্ট পেতে পারেন।
আপনি নিচের মেথডগুলো ব্যবহার করবেন:
- rename
- size
- exists?
- extname
- basename
- dirname
- directory?
- file?
কয়েকটি উদাহরণ দেখি:
# ফাইল রিনেম করা File.rename("old-name.txt", "new-name.txt") # ফাইল সাইজ বাইটে File.size("users.txt") # এই ফাইলটি কি ইতিমধ্যে এক্সিস্ট করে? File.exists?("log.txt") # ফাইল এক্সটেনশন পান, এটি কাজ করে এমন ফাইল না থাকলেও File.extname("users.txt") # => ".txt" # ডিরেক্টরি পার্ট ছাড়া ফাইল নাম পান File.basename("/tmp/ebook.pdf") # => "ebook.pdf" # এই ফাইলের পাথ পান, ফাইল নাম ছাড়া File.dirname("/tmp/ebook.pdf") # => "/tmp" # এটি কি আসলে একটি ফাইল নাকি ডিরেক্টরি? File.directory?("cats")
শেষ উদাহরণটি বেশি মানে রাখে যদি আপনি একটি ডিরেক্টরি লিস্টিংয়ের কন্টেন্টস লুপ করেন।
def find_files_in_current_directory entries = Dir.entries(".") entries.reject { |entry| File.directory?(entry) } end
আপনি একটি ফাইলের স্ট্যাটসও পেতে পারেন, যেন ফাইল সাইজ, পারমিশন, ক্রিয়েশন ডেট, ইত্যাদি:
File.stat("/tmp")
ডিরেক্টরি অপারেশন
Dir.glob ব্যবহার করে আপনি সকল ফাইলের একটি লিস্ট পেতে পারেন যা একটি নির্দিষ্ট প্যাটার্নের সাথে ম্যাচ করে।
এখানে কিছু উদাহরণ:
# কারেন্ট ডিরেক্টরির সকল ফাইল Dir.glob("*") # নামে "spec" ধারণকারী সকল ফাইল Dir.glob("*spec*") # সকল রুবি ফাইল Dir.glob("*.rb")
এই এক লাইন কোড রিকার্সিভলি রুবিতে সকল ফাইল লিস্ট করবে, কারেন্ট ডিরেক্টরি থেকে শুরু করে:
Dir.glob("**/**")
আপনি যদি শুধু ডিরেক্টরি সার্চ করতে চান তবে এটি ব্যবহার করুন:
Dir.glob("**/**/")
Dir ক্লাস ব্যবহার করে আপনি কারেন্ট ওয়ার্কিং ডিরেক্টরি প্রিন্ট করতে পারেন:
Dir.pwd
একটি ডিরেক্টরি খালি কিনা চেক করুন:
Dir.empty?("/tmp") # false
একটি ডিরেক্টরি এক্সিস্ট করে কিনা চেক করুন:
Dir.exists?("/home/jesus") # true
একটি নতুন ডিরেক্টরি তৈরি করুন:
Dir.mkdir("/tmp/testing")
mktmpdir দিয়ে একটি টেম্পোরারি ডিরেক্টরি তৈরি করুন:
Dir.mktmpdir do |dir| File.write(dir + "/log.txt", "test") end
FileUtils মডিউল কীভাবে ব্যবহার করবেন
FileUtils মডিউলের মধ্যে কিছু এক্সট্রা ফাইল হ্যান্ডলিং ইউটিলিটি রয়েছে যেগুলো আপনি এক্সেস করতে পারেন।
উদাহরণস্বরূপ, আপনি ফাইল কম্পেয়ার করতে পারেন, একটি ফাইল টাচ করতে পারেন ( লাস্ট অ্যাক্সেস এবং মডিফিকেশন টাইম আপডেট করতে), বা cp_r দিয়ে ফাইল ও ডিরেক্টরি কপি করতে পারেন।
যেন:
require 'fileutils' FileUtils.compare_file("a.txt", "b.txt") FileUtils.touch("/tmp/lock") FileUtils.cp_r("data", "backup")
বibur cp_r-এ “r” বলতে চায় “recursive”।
সারাংশ
আপনি শিখেছেন রুবিতে বিল্ট-ইন মেথড যেমন File.read এবং File.write ব্যবহার করে ফাইল ও ফোল্ডার ম্যানেজ করা।
পড়ার জন্য ধন্যবাদ!