14. Fayllar bilan ishlash¶
Dastur ishlayotganda ma'lumotlar odatda xotirada saqlanadi.
Masalan:
int yosh = 18;
Lekin dastur yopilgandan keyin bu ma'lumot yo‘qolishi mumkin.
Agar ma'lumotni keyin ham ishlatmoqchi bo‘lsak, uni faylga saqlashimiz mumkin.
Masalan:
ism.txt
faylida:
Ali
degan ma'lumotni saqlash mumkin.
C tilida fayllar bilan ishlash uchun stdio.h kutubxonasidagi funksiyalardan foydalanamiz.
Fayl nima?¶
Fayl — kompyuterda ma'lumotlarni saqlash uchun ishlatiladigan joy.
Masalan:
ism.txt
talabalar.txt
natija.txt
Fayllarda matn, sonlar yoki boshqa ma'lumotlarni saqlash mumkin.
Fayl bilan ishlash bosqichlari¶
C tilida fayl bilan ishlaganda odatda quyidagi ishlarni qilamiz:
- Faylni ochamiz.
- Faylga ma'lumot yozamiz yoki undan o‘qiymiz.
- Faylni yopamiz.
Masalan:
faylni ochish
↓
ma'lumot bilan ishlash
↓
faylni yopish
FILE nima?¶
C tilida fayl bilan ishlash uchun FILE turidan foydalanamiz.
Masalan:
FILE *fayl;
Bu yerda fayl faylga murojaat qilish uchun ishlatiladi.
Faylni ochish¶
Faylni ochish uchun fopen() funksiyasidan foydalanamiz.
Masalan:
FILE *fayl = fopen("ism.txt", "w");
Bu yerda:
"ism.txt"
fayl nomi.
"w"
esa faylni yozish uchun ochish rejimi.
Faylga yozish¶
Faylga ma'lumot yozish uchun fprintf() funksiyasidan foydalanish mumkin.
Masalan:
#include <stdio.h>
int main() {
FILE *fayl = fopen("ism.txt", "w");
fprintf(fayl, "Ali");
fclose(fayl);
return 0;
}
Dastur ishlagandan keyin ism.txt fayli yaratiladi.
Unda:
Ali
matni bo‘ladi.
fclose() nima qiladi?¶
Fayl bilan ishlash tugagach, uni yopish kerak.
Buning uchun:
fclose(fayl);
ishlatiladi.
Shuning uchun odatda:
fopen()
bilan ochamiz.
Keyin:
fprintf()
bilan yozamiz.
Oxirida:
fclose()
bilan yopamiz.
Faylni ochish rejimlari¶
fopen() ikkinchi parametr orqali fayl qanday ishlatilishini belgilaydi.
Eng muhim rejimlar:
| Rejim | Vazifasi |
|---|---|
"w" |
Faylga yozish |
"r" |
Fayldan o‘qish |
"a" |
Fayl oxiriga qo‘shish |
Hozircha shu uchta rejimni bilish kifoya.
"w" rejimi¶
"w" faylga yozish uchun ishlatiladi.
Masalan:
FILE *fayl = fopen("test.txt", "w");
Keyin:
fprintf(fayl, "Salom");
Faylda:
Salom
bo‘ladi.
Agar fayl mavjud bo‘lmasa, C uni yaratishi mumkin.
Agar mavjud bo‘lsa, "w" rejimi eski ma'lumotlarni o‘chirib, yangidan yozishi mumkin.
Shuning uchun "w" bilan ehtiyot bo‘lish kerak.
"a" rejimi¶
"a" fayl oxiriga yangi ma'lumot qo‘shish uchun ishlatiladi.
Masalan, faylda:
Salom
bo‘lsa:
FILE *fayl = fopen("test.txt", "a");
fprintf(fayl, "\nYangi matn");
natijada:
Salom
Yangi matn
bo‘ladi.
Eski ma'lumot saqlanib qoladi.
"r" rejimi¶
"r" fayldan o‘qish uchun ishlatiladi.
Masalan, test.txt faylida:
Salom
bo‘lsin.
Quyidagi dastur fayldagi ma'lumotni o‘qiydi:
#include <stdio.h>
int main() {
FILE *fayl = fopen("test.txt", "r");
char matn[100];
fscanf(fayl, "%99s", matn);
printf("%s", matn);
fclose(fayl);
return 0;
}
Natija:
Salom
Fayl ochilganini tekshirish¶
Faylni ochishda xatolik yuz berishi mumkin.
Shuning uchun fayl ochilganini tekshirish yaxshi odat.
Masalan:
FILE *fayl = fopen("test.txt", "r");
if (fayl == NULL) {
printf("Faylni ochib bo'lmadi.");
return 1;
}
Agar fayl ochilmasa, fopen() NULL qaytarishi mumkin.
Faylga bir nechta ma'lumot yozish¶
Masalan:
#include <stdio.h>
int main() {
FILE *fayl = fopen("talaba.txt", "w");
if (fayl == NULL) {
printf("Faylni ochib bo'lmadi.");
return 1;
}
fprintf(fayl, "Ali\n");
fprintf(fayl, "17\n");
fprintf(fayl, "90\n");
fclose(fayl);
return 0;
}
Faylda:
Ali
17
90
bo‘ladi.
Fayldan bir nechta qiymat o‘qish¶
Fayldan ma'lumotni fscanf() yordamida o‘qish mumkin.
Masalan, faylda:
Ali 17
bo‘lsin.
Dastur:
#include <stdio.h>
int main() {
FILE *fayl = fopen("talaba.txt", "r");
char ism[20];
int yosh;
fscanf(fayl, "%19s %d", ism, &yosh);
printf("Ism: %s\n", ism);
printf("Yosh: %d\n", yosh);
fclose(fayl);
return 0;
}
Natija:
Ism: Ali
Yosh: 17
fputs() va fgets()¶
Matn yozish va o‘qish uchun yana ikkita foydali funksiya bor:
fputs()
va:
fgets()
fputs() faylga matn yozadi.
Masalan:
fputs("Salom\n", fayl);
fgets() esa fayldan matn o‘qiydi.
Masalan:
char matn[100];
fgets(matn, 100, fayl);
Hozircha fprintf() va fscanf() bilan ishlashni yaxshi tushunib olish kifoya.
Fayl bilan ishlashning to‘liq misoli¶
Keling, faylga ism yozamiz.
#include <stdio.h>
int main() {
FILE *fayl = fopen("ism.txt", "w");
if (fayl == NULL) {
printf("Faylni ochib bo'lmadi.");
return 1;
}
fprintf(fayl, "Husan");
fclose(fayl);
return 0;
}
Dastur ishlagandan keyin:
ism.txt
fayli ichida:
Husan
bo‘ladi.
Faylni o‘qish¶
Endi shu faylni o‘qiymiz.
#include <stdio.h>
int main() {
FILE *fayl = fopen("ism.txt", "r");
if (fayl == NULL) {
printf("Faylni ochib bo'lmadi.");
return 1;
}
char ism[50];
fscanf(fayl, "%49s", ism);
printf("Ism: %s", ism);
fclose(fayl);
return 0;
}
Natija:
Ism: Husan
Faylga yozish va o‘qish¶
Fayllardan foydalanib ma'lumotni dastur yopilgandan keyin ham saqlashimiz mumkin.
Masalan:
Dastur
↓
ma'lumot
↓
fayl
↓
dastur qayta ishga tushadi
↓
fayldan ma'lumot o‘qiladi
Bu oddiy dasturlarda ma'lumotlarni saqlash uchun foydali.
Amaliy mashqlar¶
1-mashq¶
test.txt nomli fayl yarating va unga:
Salom, C!
matnini yozing.
2-mashq¶
Foydalanuvchidan ism oling va uni faylga saqlang.
Masalan:
Ism: Ali
Keyin faylda:
Ali
bo‘lsin.
3-mashq¶
Fayldagi ismni o‘qing va ekranga chiqaring.
Masalan:
Ism: Ali
4-mashq¶
Faylga uchta son yozing:
10
20
30
Keyin ularni fayldan o‘qing.
5-mashq¶
Faylga bir nechta ism yozing.
Masalan:
Ali
Vali
Hasan
Keyin ularni o‘qib, ekranga chiqaring.
Muhim narsalarni eslab qoling¶
Fayl bilan ishlash uchun:
#include <stdio.h>
Fayl ochish:
FILE *fayl = fopen("test.txt", "w");
Faylga yozish:
fprintf(fayl, "Salom");
Fayldan o‘qish:
fscanf(fayl, "%s", matn);
Faylni yopish:
fclose(fayl);
Eng ko‘p ishlatiladigan rejimlar:
"w" → yozish
"r" → o‘qish
"a" → oxiriga qo‘shish
Xulosa¶
Fayllar yordamida dasturdagi ma'lumotlarni saqlashimiz mumkin.
Asosiy jarayon:
fopen()
↓
ma'lumot bilan ishlash
↓
fclose()
Fayllar katta dasturlarda ma'lumotlarni saqlashning muhim usullaridan biridir.