Programozás alapjai ( C )
8
gyak Állománykezelés
· Olvasható információt tartalmaznak
· Sor végét a CR/LF zárja
· Állomány végét az EOF zárja
· 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
· deklarációja az stdio.h állományban található
· FILE *f;
· 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
· használata után
· fclose(f);
· fflush(f); //írási művelet végrehajtása esetén
while (! feof(f)) {
scanf(f,
….)
}
close(f);
· 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