Miten siis voi tekstitiedostosta lukea char-taulukkoon merkki kerrallaan? Osaan siis lukea tiedostosta, mutta miten teksti siirretään char-taulukkoon merkki kerrallaan?
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);
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.
Kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.