Programozás alapjai ( C )

 

8 gyak  Állománykezelés

 

Szöveges állományok

·        Olvasható információt tartalmaznak

·        Sor végét a CR/LF zárja

·        Állomány végét az EOF zárja

 

Bináris állományok

·        byte-okból épülnek fel

·        állomány tartalmának eléréséhez szükséges lépések:

o       fájl azonosító mutató definiálása

o       állomány megnyitása

o       az állomány tartalmának feldolgozása fájlműveletek (olvasás, írás, pozícionálás stb.) felhasználásával

o       a műveletek elvégzése után az állomány lezárása

 

Fájl mutató definiálása

·        deklarációja az stdio.h állományban található

·        FILE *f;

 

Fájl megnyitása

·        Kapcsolatot hoz létre a fájlmutató és az állomány között

·        FILE *fopen(const char *filename, const char *mode);

·        filename : az állomány nevét és elérési útvonalát adhatjuk meg

·        mode: ez is sztring és a fájl elérés típusát határozza meg

o       szöveges: r, w, a

o       bináris: rb, wb, ar

 

Fájl lezárása

·        használata után

·        fclose(f);

·        fflush(f);                 //írási művelet végrehajtása esetén

 

Állomány végének vizsgálata

 

while (! feof(f)) {

                scanf(f, ….)

}

close(f);

 

Pozícionálás állományban

·        rewind(f);               //fájl elejére pozícionálás

·        fseek (FILE *stream, long offset, int honnan);

o       offset a fájl pozíció relatív távolságát tartalmazza, a honnan paraméter által kijelölt pozícióhoz képest

·        ftell(FILE *stream);                       //aktuális pozíció lekérdezése

 

Példa: állomány megnyitása, olvasása (szükséges létező proba.dat szöveges állomány )

 

#include <stdio.h>

#include <stdlib.h>

 

main() {

        FILE *f;

        char buff[80];

        int i=0;

        if ((f=fopen("proba.dat","r"))== NULL) {

                printf("Nem létezik a proba.dat állomány!\n"); exit(-1);

        }

        else {

                while (fgets(buff,80,f)){

                        i++;

                        if(i%3==0) printf("%3d  %s",i,buff);

                        else printf("      %s",buff);

                }

                fclose(f);

        }

}

 

Példa: előző példa átalakítva, hogy a program futása során lehet meghatározni a beenő állományt

·        feladat: az első sor sorszámát is írja ki; mindes sor sorszámát írja ki; minden 10.-et ne írja ki

 

#include <stdio.h>

#include <stdlib.h>

 

main() {

        FILE *f;

        char buff[80],fnev[14];

        int i=0;

 

        printf("\nAz állomány neve:");

        scanf("%s",fnev);

 

        if ((f=fopen(fnev,"r"))== NULL) {

                printf("Nem létezik a %s állomány!\n",fnev); exit(-1);

        }

        else {

                while (fgets(buff,80,f)){

                        i++;

                        if(i%3==0 || i==1) printf("%3d  %s",i,buff);                                          /*feladat*/

                        else printf("      %s",buff);

                }

                fclose(f);

        }

}

 

 

 

 

 

 

 

Példa: a megadott állományt úgy írja ki, hogy a ’space’ –szel elválasztott szavakat külön sorba írja

#include <stdio.h>

#include <stdlib.h>

 

main() {

        FILE *f;

        char buff[80],fnev[15],szo[80];

        int i,j,k;

 

        printf("\nAz állomány neve:");

        scanf("%s",fnev);

 

        if ((f=fopen(fnev,"r"))== NULL) {

                printf("Nem létezik a %s állomány!\n",fnev); exit(-1);

        }

        else {

                while (fgets(buff,80,f)) {

                        j=0; k=strlen(buff);

                        for(i=0;i<k;i++) {

                                if(buff[i] != ' ' && buff[i]!= '.') {

                                             szo[j]=buff[i]; j++;

                                }

                                else {

                                        szo[j]='\0';

                                        printf("%s\n",szo);

                                        j=0;

                                }

                        }

                }

                fclose(f);

        }

}

 

Példa: az aru.txt állományban levő áruk tételes és össze árát határozza meg

//aru.txt egy sora: szék 5 6500

#include <stdio.h>

#include <stdlib.h>

 

main() {

        FILE *f;

        char aru[12];

        int db=0;

        float ar=0, x=0, sum=0;

 

        if ((f=fopen("aru.txt","r"))== NULL) {

                printf("Nem létezik az aru.txt állomány!\n"); exit(-1);

        }

        else {

                while (fscanf(f,"%s %d %f",aru,&db,&ar) > 0) {

                        x=db * ar;

                        printf("%-12s %3d %6.1f %8.2f\n",aru,db,ar,x);

                        sum+=x;

                }

                fclose(f);

                printf("--------------------------------%8.2f\n",sum);

        }

        return;

}

 

4. feladat: Az előző példa alapján:   (tárgy / subject:  C feladat 4)

·        állományban található információk:

o       termék név, ügyfélkód, db, ár

·        állományban található információk alapján a következők információk kiíratása:

o       tételenkénti összegzés

o       végső összegzés összesen hány db és áru terméket vásároltak

o       mennyi az áruk átlagos ára

o       legtöbbet vásárolt ügyfél termékeinek kiíratása

 

 

Copyright Kolcza Gábor