(H) Tiedoston rivien numerointi

Tavoite: Opettelen tekstitiedostosta lukemista ja siihen kirjoittamista.

Ohjeita: Luo uusi projekti: student/05/line_numbers/.

Toteuta ohjelma, joka lukee tiedoston ja kirjoittaa sen sisällön toiseen tekstitiedostoon siten, että jokaisen rivin alkuun on lisätty kyseisen rivin järjestysnumero ja välilyönti.

Aluksi ohjelma kysyy käyttäjältä, mistä tiedostosta tekstiä luetaan ja mihin tiedostoon tekstiä kirjoitetaan. Mikäli input-tiedosto saadaan avattua, ohjelma ei tulosta näytölle muuta:

Input file: a.input
Output file: a.output

Mikäli input-tiedostoa ei kyetä jostain syystä avaamaan, tulostetaan käyttäjälle virheilmoitus ja ohjelman suoritus lopetetaan paluuarvolla EXIT_FAILURE:

Input file: not_a_file.input
Output file: a.output
Error! The file not_a_file.input cannot be opened.

Jos tiedostossa a.input olisi tallennettuna seuraava teksti:

Yogi has a best friend too
Boo Boo, Boo Boo
Yogi has a best friend too
Boo Boo, Boo Boo Bear
Boo Boo, Boo Boo Bear
Boo Boo, Boo Boo Bear
Yogi has a best friend too
Boo Boo, Boo Boo Bear

niin ohjelma kirjoittaisi ensimmäisessä esimerkkisuorituksessa tiedostoon a.output rivit:

1 Yogi has a best friend too
2 Boo Boo, Boo Boo
3 Yogi has a best friend too
4 Boo Boo, Boo Boo Bear
5 Boo Boo, Boo Boo Bear
6 Boo Boo, Boo Boo Bear
7 Yogi has a best friend too
8 Boo Boo, Boo Boo Bear

Vinkkejä tehtävän tekemiseen:

  • Huomioi, että syötetiedoston pitää olla talletettuna siihen hakemistoon, jossa ohjelma suoritetaan. Jos et ole muuttanut oletusasetuksia, Qt Creator kääntää ohjelman hakemistoon, jonka nimi alkaa build- ja joka on lähdekoodihakemiston rinnalla, ja myös suorittaa ohjelman ko. hakemistossa.

    Ohjelman suorituskansion voi muuttaa Qt Creatorissa, mutta tällöin myös kääntäjän generoimat tiedostot menevät tähän uuteen sijaintiin, ja ne joutuvat helposti vahingossa versionhallintaan. Yksinkertaisinta on kopioida syötetiedosto edellä mainittuun hakemistoon, joka alkaa sanalla build-.

  • Luomiasi tekstitiedostoja ei tarvitse lisätä versionhallintaan.

  • Kannattaa jälleen toteuttaa ohjelma osissa. Esimerkiksi voit ensin tehdä ohjelman, joka vain tulostaa tiedoston rivit yksi kerrallaan. Tämän jälkeen voit lisätä tulosteeseen rivinumerot ja lopulta näytölle tulostamisen sijaan kirjoittaa tekstin tiedostoon.

  • Muista, että tiedostojen käsittely vaati C++:ssa fstream-kirjaston sisällyttämistä kooditiedoston alussa.

  • Muista, että tiedostojen käsittelyssä on kolme osaa: avaaminen, kirjoittaminen/lukeminen ja sulkeminen. Muista siis myös sulkea avaamasi tiedostot, kun ohjelma ei enää käsittele niitä.

A+ esittää tässä kohdassa tehtävän palautuslomakkeen.