164
Мысал: Бҥтін сандар тізбегін (n=5) пернелерден енгізіп, оларды файлға
жазу керек болсын.
// файл ашып, оған 5 сан жазу
#include
#include
main()
{ int k,i,n=5;
char fname[]="a:\\num.txt\0";
clrscr();
FILE *fp;
fp=fopen(fname,"w");
printf
("Енгізілген сандар %s файлына жазылады\n",fname);
puts
("Әр сан енгізілген соң, Enter басыңыз\n");
for(i=0; i
{scanf("%i",&k);
fprintf(fp,"%d ",k);
}
fclose(fp);
printf
("Енгізілген сандар %s файлына жазылды
\n",
fname
);
getch();
}
Нәтижесі:
Енгізілген сандар a:\num.txt файлына жазылады
Әр сан енгізілген соң, Enter басыңыз
1
2
3
4
5
Енгізілген сандар a:\num.txt файлына жазылды
Файлдағы мәлімет: 1 2 3 4 5
Бес бҥтін санды n=5 бҧрыннан бар file1.txt файлына жазу керек, сол файлды
мәлімет қосу ҥшін ашып, оған 5 сан жазып, сонан соң ондағы мәліметті оқып
тексеру керек.
/* файлға мәліметтер қосу */
#include
#include
#include
main()
{ int i, k=0, s=0, n=5, y, x;
char fname[]="file1.txt";
clrscr();
FILE *fp;
fp=fopen("file1.txt", "at");
if ((fp=fopen(fname,"at")) == NULL)
{ printf("\nФайлды ашуда қате болды");
165
getch();
return(0);
}
puts("Enter арқылы бөліп, 5 сан енгізіңіз:");
for(i=1; i<=n;i++)
{scanf("%i", &x);
fprintf(fp,"%d ", x);}
fclose(fp);
getch();
}
Нәтижесі:
Enter арқылы бӛліп, 5 сан енгізіңіз:
11
22
33
44
55
Файлдағы мәлімет: 1 2 3 4 5 11 22 33 44 55
Дискідегі file1.txt файлын мәліметтер оқу ҥшін ашып, ондағы мәліметті
оқып, файлдағы тақ сандардың қанша екенін және қосындысын табу керек.
/* файлдан мәліметтер оқу */
#include
#include
#include
main()
{ int i,k=0,s=0,n=5,y,x;
char fname[]="file1.txt";
clrscr();
FILE *fp;
fp=fopen(fname,"r");
/* Оқу үшін файл ашу */
fp=fopen("fp","rt");
if ((fp=fopen(fname,"rt")) == NULL)
{ printf("\n Файл ашуда қате болды");
getch();
return(0);
}
puts("Файлдан оқылған сандар:");
while(!feof(fp))
{fscanf(fp,"%i",&y);
printf(" %i ",y);
if (y%2==0) {s+=y;k=k+1;}
}
166
fclose(fp);
printf("\nТақ сандар қосындысы s = % i,
олардың саны k=%i", s, k);
getch();
}
10.2 fgets және fputs функцияларын пайдалану
Сӛз тіркестерімен жҧмыс істегенде fgets және fputs функциялары
қолданылады:
fgets
функциясының жалпы жазылу тҥрі:
fgets(нұсқауыш,MAXLEN,fp);
нұсқауыш – компьютер жадындағы орынға сілтейтін нҧсқауыш; MAXLEN –
оқылатын тіркестің максимальды ҧзындығы;
fp
- файл нҧсқауышы.
Мысалы:
#define L 20
main()
{
FILE *fp;
char *st[n];
fp=fopen(“stroka”, ”r”);
while(fgets(st, L, fp) != NULL)
puts (st);
}
Файлдарға сӛз тіркестерін жазу ҥшін fputs функциясы келесі тҥрде
қолданылады:
status=fputs(қатар нұсқауышы, fp);
status
– бҥтін сан, оның мәні
eof
функциясында жазылады, егер
fputs()
функциясы файлдың соңына шыққан болса немесе қате тапса,
fputs
функциясы жазылатын жолдың соңына /0 символын жазбайды.
Тӛменде осы функцияларды пайдалану мысалы келтірілген.
#include
void main()
{
int n;
char str[50],str1[50],ch;
FILE *fp;
// Файлға мәлімет жазу
fp = fopen("ex.txt","w");
puts("Бүтін сан енгізіңіз: "); scanf("%d",&n);
fprintf(fp,"%d\n",n);
puts ("Символ енгізіңіз: "); ch=getchar();
putc (ch, fp);
puts ("Сөз тіркесін енгізіңіз: "); gets(str);
fputs(str,fp);
fclose(fp);
// Файлдан мәлімет оқу
167
if((fp = fopen("ex.txt","r")) != NULL)
{
fscanf (fp, "%d", &n); printf ("n=%d\n", n) ;
ch = getc (fp); putchar (ch);
fgets(str1, 50, fp); puts (str1);
fclose (fp);
} else printf ("\nФайлдан мәлімет оқылмайды!");
}
Мҧндағы
fgets()
функциясының екінші параметрі N – оқылатын
символдар саны, оған '\0' белгісі де қосылады. Бҧл функция ӛз жҧмысын N-1
символын оқығаннан кейін немесе '\0' белгісі кездескенде аяқтайды. Екеуінде
де сӛз тіркесі соңына '\0' белгісі қосылады.
fgets()
функциясы оқылған сӛз
тіркесі адресін қайтарады немесе файл оқылып болғанда (не қате шықса),
NULL белгісін береді.
fputs()
функциясы әрекет дҧрыс орындалса, соңғы оқылған символ кодын
қайтарады, ал қате болса, EOF (файл соңы) белгісін береді. Бҧл функция
курсорды автоматты тҥрде келесі жолға кӛшірмейді.
Жоғарыдағы функциялар файл мәліметтерін біртіндеп, символдан соң
келесі символды қарастыра отырып ӛңдейді. С тілі файлдармен жиым сияқты
жҧмыс істеуге де мҥмкіндік береді, яғни кез келген байтты жеке ӛңдеуге де
болады. Файл ішіндегі белгілі бір орынды айқындау ҥшін мына функция
қолданылады:
fseek(файлға нұсқауыш, бастапқы нүктеден ығысу, бастапқы нүкте);
Екінші аргумент типі long, оның мәні оң да, теріс те болуы мҥмкін. Ол
бастапқы нҥктеден қанша орынға (байтпен) ығысу керек екендігін кӛрсетеді.
Ҥшінші аргумент файлдағы бастапқы нҥкте орнын анықтайтын код болып
табылады. Осы код ҥшін мынадай мәндер тағайындалған:
0 - файл басы;
1 - ағымдағы позиция;
2 - файл соңы.
Дҧрыс орындалғанда, fseek() функциясы 0 мәнін береді, ал егер қате
(мысалы, файлдың сол жақ шекарасынан ары аспақшы болғанда) болса, онда 1
береді.
10.3 fwrite және fread функцияларын пайдалану
Қҧрылымдарды пайдаланатын файлдармен жҧмыс істеу кезінде
fread()/fwrite()
функцияларын пайдаланған ыңғайлы. Олардың жазылуы:
fread(ptr, size, n, fp);
мҧнда
fp
файлынан әрқайсысы
size
байттан тҧратын мәліметтің
n
блогы
ptv
нҧсқауышы кӛрсетіп тҧрған жады аймағына оқылады (оқылатын блок ҥшін
алдын ала орын дайындап қою қажет).
fwrite(ptr,size,n,fp);
мҧнда ptr нҧсқауышы кӛрсетіп тҧрған жады аймағында орналасқан
әрқайсысы size байттан тҧратын мәліметтің
n
блогы ашық тҧрған
fp
файлына
жазылады.
Достарыңызбен бөлісу: |