Dosya Okumak

Şimdi, filename argümanında belirtilen dosyayı okumak için işlevsellik ekleyeceğiz. İlk olarak, bunu test etmek için örnek bir dosyaya ihtiyacımız var: Birkaç satırda metin içeren ve bazı tekrarlanan kelimeler içeren bir dosya kullanacağız. Liste 12-3'te işe yarayacak bir Emily Dickinson şiiri var! Projenizin kök dizininde poem.txt adlı bir dosya oluşturun ve “Ben Hiçkimse'yim! Sen kimsin?"

Dosya adı: poem.txt

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!

Liste 12-3: Emily Dickinson'ın bir şiiri iyi bir test örneği yapıyor

Metin yerindeyken, src/main.rs dosyasını düzenleyin ve okunacak dosya için kod ekleyin.

Dosya adı: src/main.rs

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

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

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

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

    let contents = fs::read_to_string(filename)
        .expect("Something went wrong reading the file");

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

Liste 12-4: İkinci argüman tarafından belirtilen dosyanın içeriğini okuma

İlk olarak, standart kitaplığın ilgili bir bölümünü bir use ifadesi ile getiriyoruz: dosyaları işlemek için std::fs'ye ihtiyacımız var.

main'de, fs::read_to_string ifadesi filename argümanını alır, dosyayı açar, ve dosyanın içeriğini tutan Result<String>'i döndürür.

Bundan sonra, geçici olarak bir println! ifadesi koyacağız ki dosya okunduktan sonra içindekileri okuyabilelim.

Hadi şimdi bu kodu herhangi bir ilk komut satırı argümanıyla (çünkü henüz dosya arama kısmını süreklemedik) ve poem.txt dosyasını ikinci bir argüman olarak kullanarak çalıştıralım.

$ cargo run the poem.txt
   Compiling minigrep v0.1.0 (file:///projects/minigrep)
    Finished dev [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!

Güzel! Bu kod dosyanın içeriğini okur ve sonra içeriğini yazar. Ama kod bazı sorunlara sahip. main fonksiyonunun birden fazla işlevi var. Genel olarak tek bir fikre dayalı fonksiyonlar daha kolay karşılanır ve sürdürülür. Bir diğer problem olaraktan, biz henüz herhangi bir hatayı işlemiyoruz. Program küçük yani bu sıkıntılar büyük bir program değil ama program büyüdükçe bu tarz sıkıntıları temizce çözmek zorlaşacaktır. Bu tarz sıkıntıları kodunuz büyümeden çözmek iyi bir pratik olacaktır. Bunu sonra yapacağız.