previous next Up Title Contents Index

Esimerkki

Seuraavassa ohjelmassa tiedostoa käsitellään tietue kerrallaan.

Ohjelmassa luetaan näppäimistöltä syötettyjä henkilötietoja ja kirjoitetaan ne tiedostoon.
Tämän jälkeen tiedot luetaan tiedostosta ja kirjoitetaan kuvaruudulle.
Tiedosto on binääritiedosto, koska ikä talletetaan int-tyyppisenä. Täten tiedostoa ei pysty tulostamaan selväkielisenä esimerkiksi DOS:n type-komennolla. Ainoa tapa lukea tiedostoa järkevästi on tehdä se tietueittain käyttäen samaa tietuemäärittelyä kuin tiedostoon kirjoitettaessa.
    #include <stdio.h>
    /*VAKIOT ********************************/
    #define TIEDOSTO "A:\\NIMET.BIN"
    #define NIMI_MAX 20
    /* TIETOTYYPT **************************/
    struct henkilo{
        char nimi[NIMI_MAX+1];
        int ika;
    };
    /* GLOBAALIT MUUTTUJAT **************/
    FILE *f; /* henkilötiedosto */
    /* PÄÄOHJELMA************************/
    void main()
    {
        struct henkilo h;
        char vastaus;
        char rivi[81];
        f = fopen (TIEDOSTO, "wb"); 
        /* avataan tiedosto kirjoittamista varten */

        if (f==NULL)
        {
            printf ("output-tiedoston avaus ");
            printf (" ei onnistu.\n");
        }
        else
        { /* tiedoston avaus onnistui. Sinne voidaan kirjoittaa: */ 
            do{
                clrscr();
                printf ("Anna nimi (max %d merkkiä):, NIMI_MAX);
                gets(h.nimi); /*nimi h:n nimi-kenttään */
                printf ("Anna ikä: "); 
                gets(rivi);
                sscanf(rivi,"%d",&h.ika);   /*luetaan ikä h:n ika-kenttään */
                fwrite(&h, sizeof h,1,f);   /* kirjoitetaan tietue tiedostoon*/
                printf ("Lisää nimiä (k/e)?");
                vastaus = getch();
            }while (vastaus=='k');
            fclose(f); /* suljetaan tiedosto ja....*/
            /* avataan se uudestaan lukemista varten: */
            f = fopen(TIEDOSTO, "rb");
            if (f==NULL) /* onnistuiko avaaminen */
            {
                printf ("input-tiedoston avaus ");
                printf (" ei onnistu.\n");
            }
            else /* onnistui, luetaan tiedostoa */
            {
                fread (&h,sizeof h,1,f); 
                /* luetaan yksi tietue */

                while (!feof(f)) /*onnistuiko lukeminen */
                {
                    printf ("%s %d\n",h.nimi,h.ika);  /* tulostetaan tietueen kentät */
                    fread(&h,sizeof h,1,f);  /* luetaan seuraava tietue */
                }
                fclose(f); /* suljetaan tiedosto */
            }
        }
    }

 

previous next Up Title Contents Index