Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tekstitiedostoon tallennus

Karza [10.07.2007 09:23:11]

#

1. Tässä siis on tarkoitus kirjoittaa jotain, jonka jälkeen CTRL-Z painamalla kirjoitettu teksti tallentuu teksti01 nimiseen txt tiedostoon. Tämä onnistuukin, mutta miten saisi tarkistettua ja luotua sillain, että jos teksti01 on jo olemassa niin tallennus tapahtuisi teksti02 tiedostoon... ja jos on jo olemassa teksti02 niin sitten teksti03 jnejne... ? Jotenkin koitin pistää noita 01,02 jne. päätteeitä taulukkoon ja tarkistaa sieltä ja yhdistää sitten tiedostonimeen, mutta meni liian hankalaksi minun aivojen käsiteltäväks.

2. Ja mikä tuo "EOF" on? sen jotenkin pitäis viitata CTRL-Z mutta millä tavalla?

3. Jostain syystä en onnistu tallentamaan polun muodossa olevaan tiedostoon. Siis tallennus on onnistunut kun vaan pistän "teksti01.txt" eli silloin se luonnollisesti tallentuu samaan kansioon missä itse ohjelma on, mutta tallennusta ei tapahdu jos pistän esim "C:\\Program Files\Jotain\teksti01.txt"... mitään ei tapahdu. Ainakaan en löydä kyseistä tiedostoa sieltä. Ohjelma kyllä välähtää mutta... =/

#include <iostream>
using namespace std;
#include <fstream>
int main()
{
    char merkki;
    ofstream tiedosto("teksti01.txt");
    cout << "Kirjoita tekstiä, Lopettaaksesi paina CTRL-Z\n";
    cin.get(merkki);
    while (merkki != EOF)
    {
          tiedosto.put(merkki);
          cin.get(merkki);
    }
    tiedosto.close();

    return 0;
}

E: C++ nyt siis kyseessä.

os [10.07.2007 12:28:44]

#

Kenoviiva, \, on erikoismerkki, joka nielee sevuraavan merkin ja muuttaa näiden yhdistelmän toiseksi erikoismerkiksi, jota ei syystä tai toisesta muuten voida kirjoittaa koodiin, kuten \n (rivivaihto), \0 (nollatavu) tai \" (lainausmerkki), kenoviivaa merkitään \\.
Tiedostopolun oikea kirjoitusasu on:
C:\\Program Files\\Jotain\\teksti01.txt
tai
C:/Program Files/Jotain/teksti01.txt

EOF (end of file) on arvo, jonka esimerkiksi get palautaa, kun tiedoston viimeinen merkki on jo luettu. Joissakin tapauksissa käyttäjä voi syöttää tämän merkin painamalla CTRL-Z. Minulla tämä ei ainakaan toimi.

Tiedoston olemassaoloa voi tutkia esimerkiksi yrittämällä avata tiedostoa tekstiXX.txt lukumoodissa, kunnes jonkin luvun XX kohdalla avaaminen epäonnistuu eli tiedostoa ei ole olemassa.

Antti Laaksonen [10.07.2007 13:28:09]

#

Tiedoston lopetusmerkki EOF annetaan DOSissa ja Windowsissa näppäilyllä Control+Z ja Unixissa näppäilyllä Control+D.

Kokeiltavia tiedostonimiä voi muodostaa tavallisen for-silmukan avulla.

char nimi[20];
int i;
for (i = 0; i < 100; i++) {
    sprintf(nimi, "teksti%02i.txt", i);
    printf("%s\n", nimi);
    /* tässä voisi sitten yrittää avata tiedostoa */
}

Karza [10.07.2007 15:15:25]

#

En oikein onnistu.. tarkoitus olisi tehdä ohjelma joka tekis for silmukan avulla esim 10 tiedostoa nimeltään teksti01, teksti02... mutta niin ettei se menis niin vaikeaksi, että jokainen avattais erikseen. Jotenkin pitäs foria käyttää hyväks, että se automaattisesti tekis useamman tiedoston.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta