Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tiedoston luku

Sivun loppuun

Baglair [12.02.2006 20:20:28]

#

Miten luen kolme ensimmäistä merkkiä kolmannelta riviltä tiedostosta tiedosto.txt?

Blaze [12.02.2006 20:43:35]

#

Kieli?

Baglair [12.02.2006 20:47:17]

#

C tai C++ tai Pascal

Heikki [12.02.2006 20:49:23]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=cohj_4#tiedostojenkasittely
http://www.mit.jyu.fi/~vesal/kurssit/winohj/html/cpp/m36.htm
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=pascal04

Metabolix [12.02.2006 20:49:40]

#

Mene lukemaan Pascal-oppaan neljäs osa, Tiedostot. (Edit: Bah, hidas :)

Baglair [12.02.2006 21:13:09]

#

En saanut suoraa vastausta kysymykseeni antamistanne ohjeista. En tahdo lukea koko tiedostoa. Haluan vain lukea tiedostosta tiedosto.txt kolmannen rivin kolme ensimmäistä merkkiä char -tyypiseen taulukkoon. Kieli voisi olla vaikka C tällä kertaa.

Gaxx [12.02.2006 21:17:04]

#

Putkan C-oppaasta löytyy gets-funktio jolla voi lukea rivin. Luet kolme kertaa tiedostosta gets funktiolla ja sitten poimit siitä ne kolme ensimmäistä merkkiä. Käytännössä ei ole helpompaa tapaa, jos et tiedä kunkin edeltävän rivin pituutta.

Baglair [12.02.2006 21:17:44]

#

Selvä, tuo auttoikin jo eteenpäin.

koo [12.02.2006 21:58:01]

#

Ei-iiih, gets-funktiota ei saa käyttää yhtään mihinkään! Se on yksi C:n pahimmista puskuriylivuotojen aiheuttajista. Kokeile nyt mieluummin vaikka jotain tällaista:

int c;
char s[4];
int i;
for (i = 0; i < 2; ++i) {
        do {
                c = getchar();
        } while (c != EOF && c != '\n');
}
for (i = 0; i < 3; ++i) {
        c = getchar();
        s[i] = c == EOF ? '\0' : (char) c;
}
s[i] = '\0';

Jos luetaan tiedostoa, getcharia vastaava funktio on getc (tai fgetc). Ja tiedostohan piti avata fopenilla ja sulkea fclosella.

Baglair [12.02.2006 22:08:50]

#

Kiitoksia koo. Tuollaisia virityksiä olinkin jo itse saanut aikaan.

Metabolix [12.02.2006 22:22:00]

#

Tiedostonlukuun tarkoitettu fgets ei aiheuta ylivuotoa, koska sille määritellään rivin maksimipituus, mutta sen sijaan sillä voi jäädä rivi lukematta, jos se on maksimia pidempi, jolloin kolme merkkiä eivät tulekaan kolmannelta riviltä.

Pascalilla tämäkin olisi mennyt helpoiten, minun nähdäkseni. Rivin voi skipata Readln:lla, ja kolme merkkiä saa vaikka lukemalla Readln:lla String[3]-tyyppiseen muuttujaan eli kolmen merkin stringiin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta