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

Tiedoston lukeminen

Seuraavaksi lisätään toiminnallisuus, joka lukee file_path-argumentilla määritellyn tiedoston. Tarvitsemme ensin testitiedoston, jolla voimme kokeilla toimintoa. Käytämme tiedostoa, jossa on pieni määrä tekstiä useilla riveillä ja joitain toistuvia sanoja. Listing 12-3 sisältää Emily Dickinsonin runon, joka sopii hyvin testitapaukseksi!

Luo projektisi juuritason hakemistoon tiedosto nimeltä poem.txt ja kirjoita siihen runo “I’m Nobody! Who are you?”.

Filename: poem.txt
{{#include ../listings/ch12-an-io-project/listing-12-03/poem.txt}}
Listing 12-3: Emily Dickinsonin runo toimii hyvänä testiaineistona.

Kun teksti on lisätty tiedostoon, muokkaa src/main.rs-tiedostoa ja lisää siihen koodi, joka lukee tiedoston sisällön, kuten Listing 12-4 näyttää.

Filename: src/main.rs
{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-04/src/main.rs:here}}
Listing 12-4: Toisen argumentin määrittämän tiedoston lukeminen

Ensimmäiseksi tuomme standardikirjastosta tarvittavan osan use-lauseella: tarvitsemme std::fs-moduulin tiedostojen käsittelyä varten.

main-funktiossa uusi fs::read_to_string-kutsu ottaa file_path-muuttujan, avaa tiedoston ja palauttaa std::io::Result<String>-tyyppisen arvon, joka sisältää tiedoston sisällön.

Lisäämme jälleen väliaikaisen println!-lauseen, joka tulostaa contents-muuttujan arvon tiedoston lukemisen jälkeen, jotta voimme tarkistaa, että ohjelma toimii odotetusti.

Suoritetaan ohjelma antamalla mikä tahansa merkkijono ensimmäiseksi komentoriviargumentiksi (koska emme ole vielä toteuttaneet hakutoimintoa) ja poem.txt-tiedosto toiseksi argumentiksi:

{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-04/output.txt}}

Hienoa! Koodi luki tiedoston ja tulosti sen sisällön. Mutta tässä on muutamia ongelmia. Tällä hetkellä main-funktiolla on useita vastuita: yleensä funktiot ovat selkeämpiä ja helpompia ylläpitää, jos ne hoitavat vain yhden asian kerrallaan. Toinen ongelma on, että emme käsittele virheitä niin hyvin kuin voisimme. Ohjelma on vielä pieni, joten nämä puutteet eivät ole suuria ongelmia, mutta kun ohjelma kasvaa, niiden korjaaminen siististi vaikeutuu.

On hyvä käytäntö aloittaa refaktorointi varhaisessa vaiheessa ohjelmistokehitystä, koska pienempi määrä koodia on helpompi jäsentää uudelleen. Teemme sen seuraavaksi.