Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Tiedostosta luku taulukkoon

Andu [11.06.2006 22:22:12]

#

Miten siis voi tekstitiedostosta lukea char-taulukkoon merkki kerrallaan? Osaan siis lukea tiedostosta, mutta miten teksti siirretään char-taulukkoon merkki kerrallaan?

os [11.06.2006 22:27:11]

#

char *taulukko;
int koko, i;
FILE *tiedosto = fopen(TIEDOSTON_NIMI,"r");

fseek(tiedosto,0,SEEK_END); // määritetään tiedoston koko
koko = ftell(tiedosto);
fseek(tiedosto,0,SEEK_SET); // palataan tiedoston alkuun
taulukko = (char*)malloc(koko); // varataan muisti

for(i=0; i<koko; i++) // luetaan tiedosto taulukkoon merkki kerrallaan
 taulukko[i] = fgetc(tiedosto);

ja lopuksi tietenkin:

free(taulukko);
fclose(tiedosto);

Metabolix [11.06.2006 22:34:25]

#

Jos koko tiedoston lukee, kuten os:n esimerkissä, on parempikin tapa:

char *taulukko;
int koko, i;
FILE *tiedosto = fopen(TIEDOSTON_NIMI, "r");

/* Mennään loppuun, kysytään sijainti (eli tiedoston koko) ja palataan alkuun. */
fseek(tiedosto, 0, SEEK_END);
koko = ftell(tiedosto);
fseek(tiedosto, 0, SEEK_SET);

/* Varataan muistia koko+1, jotta sisällön perään mahtuu vielä nollamerkkikin. */
taulukko = (char *) malloc(koko + 1);

/* Luetaan taulukkoon "koko" kappaletta char-muuttujan kokoisia paloja. */
fread(taulukko, sizeof(char), koko, tiedosto);
fclose(tiedosto);

/* Laitetaan loppuun nollamerkki ja printataan ruudulle. */
taulukko[koko] = 0;
printf("%s", taulukko);

free(taulukko);

Kiinnostaisi, kuinka sitä tiedostoa luet, jos et saa siirrettyä char-tauluun? Kun yleensä juuri char-tauluun on helpointa lukea. Yhden merkin saa tosiaan fgetc-funktiolla tai fscanf-funktiolla formaatilla "%c" ja parametrinä osoitin char-muuttujaan eli char-taulukon alkioon.

Andu [12.06.2006 00:44:46]

#

Kiitos!

Vastaus

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

Tietoa sivustosta