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!
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);
}
İ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.