Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ফাইল পড়া (Reading a File)

এখন আমরা file_path আর্গুমেন্টে নির্দিষ্ট করা ফাইলটি পড়ার জন্য ফাংশনালিটি যোগ করব। প্রথমে, এটি পরীক্ষা করার জন্য আমাদের একটি স্যাম্পল ফাইল দরকার: আমরা একাধিক লাইনে কিছু টেক্সট এবং কিছু পুনরাবৃত্তিমূলক শব্দসহ একটি ফাইল ব্যবহার করব। লিস্টিং ১২-৩-এ এমিলি ডিকিনসনের একটি কবিতা রয়েছে যা এই কাজের জন্য বেশ উপযুক্ত হবে! আপনার প্রজেক্টের রুট লেভেলে poem.txt নামে একটি ফাইল তৈরি করুন এবং "I’m Nobody! Who are you?" কবিতাটি লিখুন।

I'm nobody! Who are you?
Are you nobody, too?
Then there's a pair of us - don't tell!
They'd banish us, you know.

How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!

টেক্সট প্রস্তুত হয়ে গেলে, src/main.rs ফাইলটি এডিট করুন এবং ফাইলটি পড়ার জন্য কোড যোগ করুন, যেমনটি লিস্টিং ১২-৪-এ দেখানো হয়েছে।

use std::env;
use std::fs;

fn main() {
    // --snip--
    let args: Vec<String> = env::args().collect();

    let query = &args[1];
    let file_path = &args[2];

    println!("Searching for {query}");
    println!("In file {file_path}");

    let contents = fs::read_to_string(file_path)
        .expect("Should have been able to read the file");

    println!("With text:\n{contents}");
}

প্রথমে আমরা use স্টেটমেন্টের মাধ্যমে standard library-র একটি প্রাসঙ্গিক অংশ নিয়ে আসি: ফাইল হ্যান্ডেল করার জন্য আমাদের std::fs প্রয়োজন।

main ফাংশনের নতুন স্টেটমেন্ট fs::read_to_string file_path আর্গুমেন্টটি গ্রহণ করে, সেই ফাইলটি খোলে এবং ফাইলের কন্টেন্ট সহ একটি std::io::Result<String> টাইপের ভ্যালু রিটার্ন করে।

এর পরে, আমরা আবার একটি অস্থায়ী println! স্টেটমেন্ট যোগ করেছি যা ফাইল পড়ার পরে contents-এর ভ্যালু প্রিন্ট করে, যাতে আমরা পরীক্ষা করতে পারি যে প্রোগ্রামটি এখন পর্যন্ত ঠিকভাবে কাজ করছে কিনা।

চলুন এই কোডটি প্রথম কমান্ড লাইন আর্গুমেন্ট হিসেবে যেকোনো স্ট্রিং (কারণ আমরা এখনও সার্চিং অংশটি তৈরি করিনি) এবং দ্বিতীয় আর্গুমেন্ট হিসেবে poem.txt ফাইলটি দিয়ে চালাই:

$ cargo run -- the poem.txt
   Compiling minigrep v0.1.0 (file:///projects/minigrep)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.0s
     Running `target/debug/minigrep the poem.txt`
Searching for the
In file poem.txt
With text:
I'm nobody! Who are you?
Are you nobody, too?
Then there's a pair of us - don't tell!
They'd banish us, you know.

How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!

চমৎকার! কোডটি ফাইলের বিষয়বস্তু পড়েছে এবং তারপর প্রিন্ট করেছে। কিন্তু কোডটিতে কয়েকটি ত্রুটি রয়েছে। এই মুহূর্তে, main ফাংশনের একাধিক দায়িত্ব রয়েছে: সাধারণত, প্রতিটি ফাংশন যদি কেবল একটি কাজের জন্য দায়ী থাকে তবে ফাংশনগুলো আরও পরিষ্কার এবং রক্ষণাবেক্ষণ করা সহজ হয়। অন্য সমস্যাটি হলো আমরা যেভাবে এরর হ্যান্ডলিং করতে পারতাম, সেভাবে করছি না। প্রোগ্রামটি এখনও ছোট, তাই এই ত্রুটিগুলো বড় কোনো সমস্যা নয়, কিন্তু প্রোগ্রাম বড় হওয়ার সাথে সাথে এগুলোকে পরিষ্কারভাবে ঠিক করা আরও কঠিন হয়ে উঠবে। একটি প্রোগ্রাম তৈরির সময় প্রথম দিকেই রিফ্যাক্টরিং (refactoring) শুরু করা একটি ভালো অভ্যাস, কারণ অল্প পরিমাণ কোড রিফ্যাক্টর করা অনেক সহজ। আমরা এর পরেই তা করব।