fayllar bilan ishlash

C dasturlash tilida fayllar bilan ishlash orqali ma'lumotlarni faylga saqlash, fayldan ma'lumot o'qish va boshqa fayl bilan bog'liq amallar bajariladi. Fayllar bilan ishlash C dasturlash tilida fopen, fclose, fscanf, fprintf kabi funksiyalar yordamida amalga oshiriladi.

Fayl bilan ishlash uchta asosiy qadamni o'z ichiga oladi:

  1. Faylni ochish.

  2. Fayl bilan o'zaro ishlash (o'qish yoki yozish).

  3. Faylni yopish.

1. Faylni ochish (fopen)

fopen funksiyasi

fopen funksiyasi faylni ochadi va unga ma'lum bir rejimda (o'qish, yozish yoki qo'shish) kirishni ta'minlaydi. Faylni ochishdan maqsad — u bilan keyinchalik o'qish yoki yozish amallarini bajarishdir.

FILE *fopen(const char *filename, const char *mode);
  • FILE * — fayl ko'rsatkichi. Bu fayl bilan ishlashda qo'llaniladi.

  • filename — ochilayotgan faylning nomi.

  • mode — fayl qanday ochilishini belgilovchi rejim (o'qish, yozish va boshqalar).

Misol: Faylni ochish va tekshirish

#include <stdio.h>

int main() {
    FILE *fayl;  // Faylni ochish uchun fayl ko'rsatkichini yaratamiz

    fayl = fopen("matn.txt", "r");  // Faylni o'qish rejimida ochamiz

    if (fayl == NULL) {  // Fayl ochilmagan bo'lsa, NULL qaytariladi
        printf("Faylni ochib bo'lmadi!\n");  // Xatolik haqida xabar chiqariladi
        return 1;  // Dastur muvaffaqiyatsiz tugaydi
    }

    printf("Fayl muvaffaqiyatli ochildi!\n");  // Fayl muvaffaqiyatli ochilganda ekranga xabar chiqariladi

    fclose(fayl);  // Faylni yopish
    return 0;  // Dastur muvaffaqiyatli tugaydi
}

Har bir qatorni tushuntirish:

  1. #include <stdio.h> — bu fayl C tilidagi asosiy kirish-chiqarish (I/O) funksiyalarini ishlatish uchun zarur bo'lgan kutubxona.

  2. FILE *fayl;FILE turidagi fayl ko'rsatkichini e'lon qilamiz. Fayl ko'rsatkichi ochilgan faylni boshqarishda yordam beradi.

  3. fayl = fopen("matn.txt", "r"); — faylni o'qish rejimida ochamiz. Agar fayl mavjud bo'lmasa yoki ochishda muammo bo'lsa, NULL qaytariladi.

  4. if (fayl == NULL) — agar fayl ochilmagan bo'lsa, NULL qiymati qaytariladi, bu xatolikni bildiradi.

  5. printf("Faylni ochib bo'lmadi!\n"); — fayl ochilmasa, xatolik haqida xabar chiqariladi.

  6. fclose(fayl); — fayl ochilgan bo'lsa, uni yopamiz. Har bir ochilgan fayl yopilishi kerak.

  7. return 0; — dastur muvaffaqiyatli tugadi, 0 qiymatini qaytaradi.

2. Faylni yopish (fclose)

fclose funksiyasi

Fayl bilan ishlash tugagandan keyin uni yopish lozim. Fayl ochiq qolsa, tizim resurslari foydalanishda davom etadi, bu esa turli muammolarni keltirib chiqarishi mumkin. Faylni yopish uchun fclose funksiyasidan foydalaniladi.

int fclose(FILE *stream);
  • stream — ochilgan faylni bildiruvchi ko'rsatkich.

Misol: Faylni ochish va yopish

#include <stdio.h>

int main() {
    FILE *fayl;  // Fayl ko'rsatkichini e'lon qilamiz

    fayl = fopen("matn.txt", "r");  // Faylni o'qish rejimida ochamiz

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;  // Xatolik bo'lsa dastur to'xtaydi
    }

    printf("Fayl muvaffaqiyatli ochildi!\n");

    fclose(fayl);  // Faylni yopamiz
    printf("Fayl yopildi!\n");

    return 0;  // Dastur muvaffaqiyatli tugaydi
}

Har bir qatorni tushuntirish:

  1. fclose(fayl); — fayl bilan ishlash tugagach, fayl yopilishi kerak. Bu qator faylni yopadi.

  2. printf("Fayl yopildi!\n"); — fayl yopilgandan keyin, foydalanuvchiga fayl yopilganligini bildiradi.

3. Fayldan o'qish (fscanf)

fscanf funksiyasi

Fayldan ma'lumot o'qish uchun fscanf funksiyasidan foydalaniladi. Bu funksiya scanf funksiyasiga o'xshash, lekin u ma'lumotni fayldan o'qiydi.

int fscanf(FILE *stream, const char *format, ...);
  • stream — ochilgan faylni bildiruvchi ko'rsatkich.

  • format — o'qilayotgan ma'lumotning formati.

Misol: Fayldan matn o'qish

#include <stdio.h>

int main() {
    FILE *fayl;
    char matn[100];  // O'qiladigan matnni saqlash uchun massiv

    fayl = fopen("matn.txt", "r");  // Faylni o'qish rejimida ochish

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    fscanf(fayl, "%s", matn);  // Fayldan birinchi so'zni o'qish
    printf("O'qilgan matn: %s\n", matn);  // O'qilgan matnni ekranga chiqarish

    fclose(fayl);  // Faylni yopish
    return 0;
}

Har bir qatorni tushuntirish:

  1. char matn[100]; — 100 belgidan iborat matn saqlash uchun massiv e'lon qilinadi.

  2. fscanf(fayl, "%s", matn); — fayldan birinchi so'zni o'qib, matn massiviga yuklaydi.

  3. printf("O'qilgan matn: %s\n", matn); — o'qilgan matn ekranga chiqariladi.

4. Faylga yozish (fprintf)

fprintf funksiyasi

Faylga ma'lumot yozish uchun fprintf funksiyasidan foydalaniladi. Bu funksiya printf ga o'xshash bo'lib, lekin ma'lumotni faylga yozadi.

int fprintf(FILE *stream, const char *format, ...);
  • stream — ochilgan faylni bildiruvchi ko'rsatkich.

  • format — faylga yoziladigan ma'lumot formati.

Misol: Faylga yozish

#include <stdio.h>

int main() {
    FILE *fayl;

    fayl = fopen("matn.txt", "w");  // Faylni yozish rejimida ochish

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    fprintf(fayl, "Bu faylga yozilgan matn.\n");  // Faylga matn yozish

    fclose(fayl);  // Faylni yopish
    printf("Ma'lumot faylga muvaffaqiyatli yozildi!\n");

    return 0;
}

Har bir qatorni tushuntirish:

  1. fprintf(fayl, "Bu faylga yozilgan matn.\n"); — bu funksiya faylga "Bu faylga yozilgan matn" qatorini yozadi.

  2. fclose(fayl); — fayl bilan ishlash tugagandan so'ng, fayl yopiladi.

  3. printf("Ma'lumot faylga muvaffaqiyatli yozildi!\n"); — foydalanuvchiga ma'lumotning muvaffaqiyatli yozilganligi haqida xabar beriladi.

5. Fayl bilan ishlovchi dasturlarni GCC orqali sinash

C dasturlarini GCC orqali kompilyatsiya qilish va sinab ko'rish mumkin. Buning uchun quyidagi qadamlarni bajaramiz.

Dastur kodini faylga saqlash:

Misol uchun, yuqoridagi faylga yozish dasturini faylga saqlaymiz:

nano fayl_yozish.c

GCC bilan kompilyatsiya qilish:

Terminalda quyidagi buyruqni kiriting:

gcc fayl_yozish.c -o fayl_yozish

Bu buyruq fayl_yozish nomli bajariladigan fayl yaratadi.

Dasturni ishga tushirish:

Kompilyatsiyalangan dasturni ishga tushirish uchun quyidagi buyruqni kiriting:

./fayl_yozish

Faylni tekshirish:

Dasturni ishlatgandan keyin yozilgan faylni ko'rish uchun:

cat matn.txt

Bu yerda siz faylga yozilgan ma'lumotni ko'rasiz.

Amaliy misolllar bilan tushunrturib beramiz.

Masala 1: Foydalanuvchidan ism kiritish va faylga yozish

Vazifa: Foydalanuvchidan ismni so'rang va uni faylga yozib qo'ying. Faylni yaratish va unga ismni saqlash kerak.

Yechim:

#include <stdio.h>

int main() {
    FILE *fayl;  // Fayl ko'rsatkichi
    char ism[100];  // Foydalanuvchi ismini saqlash uchun massiv

    // Faylni yozish rejimida ochish
    fayl = fopen("ism.txt", "w");

    if (fayl == NULL) {  // Agar fayl ochilmagan bo'lsa
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    // Foydalanuvchidan ismni kiritishni so'raymiz
    printf("Ismingizni kiriting: ");
    scanf("%s", ism);

    // Faylga foydalanuvchidan kiritilgan ismni yozamiz
    fprintf(fayl, "Foydalanuvchi ismi: %s\n", ism);

    // Faylni yopamiz
    fclose(fayl);

    printf("Ismingiz faylga muvaffaqiyatli yozildi!\n");

    return 0;
}

Tushuntirish:

  1. fayl = fopen("ism.txt", "w"); — bu qator faylni yozish rejimida ochadi. Agar fayl mavjud bo'lmasa, u avtomatik ravishda yaratiladi.

  2. scanf("%s", ism); — foydalanuvchidan ismini kiritishni so'rab, uni ism o'zgaruvchisiga saqlaydi.

  3. fprintf(fayl, "Foydalanuvchi ismi: %s\n", ism); — foydalanuvchi ismini faylga yozadi.

  4. fclose(fayl); — faylni yopish uchun foydalaniladi. Fayl bilan ishlash tugaganida uni yopish majburiy.

Natija:

Dastur ishlaganda foydalanuvchidan ism kiritishni so'raydi va kiritilgan ismni faylga saqlaydi. Fayl ochilganda quyidagi natija ko'rinadi:

Foydalanuvchi ismi: Ali

Masala 2: Fayldan sonlarni o'qish va ularning yig'indisini hisoblash

Vazifa: Faylga 5 ta son yozing, keyin fayldan ularni o'qib, ularning yig'indisini hisoblang.

Yechim:

#include <stdio.h>

int main() {
    FILE *fayl;
    int sonlar[5] = {10, 20, 30, 40, 50};  // Faylga yoziladigan sonlar
    int i, sum = 0, son;

    // Faylni yozish rejimida ochamiz
    fayl = fopen("sonlar.txt", "w");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    // Faylga 5 ta son yozamiz
    for (i = 0; i < 5; i++) {
        fprintf(fayl, "%d\n", sonlar[i]);  // Har bir sonni faylga yozish
    }

    // Faylni yopamiz
    fclose(fayl);

    // Faylni o'qish rejimida ochamiz
    fayl = fopen("sonlar.txt", "r");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    // Fayldan sonlarni o'qib, ularning yig'indisini hisoblaymiz
    while (fscanf(fayl, "%d", &son) != EOF) {  // EOF (End of File) — fayl oxiriga yetganda
        sum += son;  // Har bir sonni yig'indiga qo'shamiz
    }

    // Faylni yopamiz
    fclose(fayl);

    // Natijani ekranga chiqaramiz
    printf("Fayldagi sonlar yig'indisi: %d\n", sum);

    return 0;
}

Tushuntirish:

  1. Faylga yozish:

    • fopen("sonlar.txt", "w"); — faylni yozish rejimida ochadi.

    • fprintf(fayl, "%d\n", sonlar[i]); — har bir sonni faylga yozadi.

    • fclose(fayl); — faylni yopadi.

  2. Fayldan o'qish:

    • fopen("sonlar.txt", "r"); — faylni o'qish rejimida ochadi.

    • fscanf(fayl, "%d", &son); — fayldan sonlarni o'qib, son o'zgaruvchisiga yuklaydi.

    • sum += son; — har bir sonni yig'indiga qo'shadi.

  3. fclose(fayl); — faylni yopadi.

  4. Natija: Fayldagi barcha sonlarning yig'indisini ekranga chiqaradi.

Natija:

Dastur faylga quyidagi sonlarni yozadi:

20
30
40
50

Fayldan o'qilgach, ularning yig'indisi hisoblanadi va ekranga chiqariladi:

Fayldagi sonlar yig'indisi: 150

Masala 3: Matndan ma'lumot o'qish va so'zlarni sanash

Vazifa: Fayldan matn o'qing va ushbu matndagi so'zlar sonini aniqlang.

Yechim:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
    FILE *fayl;
    char soz[100];
    int word_count = 0;

    // Faylni o'qish rejimida ochamiz
    fayl = fopen("matn.txt", "r");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    // Fayldan so'zlarni o'qib, ularning sonini hisoblaymiz
    while (fscanf(fayl, "%s", soz) != EOF) {
        word_count++;  // Har bir o'qilgan so'z uchun sanog'ini oshiramiz
    }

    // Faylni yopamiz
    fclose(fayl);

    // Natijani ekranga chiqaramiz
    printf("Fayldagi so'zlar soni: %d\n", word_count);

    return 0;
}

Tushuntirish:

  1. fscanf(fayl, "%s", soz); — fayldan so'zlarni o'qiydi va soz o'zgaruvchisiga yuklaydi.

  2. word_count++; — har bir o'qilgan so'z uchun so'zlar sanog'i oshiriladi.

  3. fclose(fayl); — faylni yopadi.

  4. Natija: Fayldagi barcha so'zlarning sonini ekranga chiqaradi.

Natija:

Agar faylda quyidagi matn bo'lsa:

Salom, bu fayldagi matn.

Dastur ekranga quyidagini chiqaradi:

Fayldagi so'zlar soni: 4

Masala 4: Fayldagi harflar va bo'sh joylarni sanash

Vazifa: Fayldagi barcha harflar va bo'sh joylar sonini aniqlaydigan dastur yozing.

Yechim:

#include <stdio.h>
#include <ctype.h>

int main() {
    FILE *fayl;
    char belgi;
    int harf_soni = 0, bosh_joy_soni = 0;

    // Faylni o'qish rejimida ochish
    fayl = fopen("matn.txt", "r");

    if (fayl == NULL) {
        printf("Faylni ochib bo'lmadi!\n");
        return 1;
    }

    // Fayldan har bir belgini o'qib, uni tekshiramiz
    while ((belgi = fgetc(fayl)) != EOF) {  // fgetc() har bir belgini o'qiydi
        if (isalpha(belgi)) {  // Harflarni aniqlash
            harf_soni++;
        } else if (isspace(belgi)) {  // Bo'sh joylarni aniqlash
            bosh_joy_soni++;
        }
    }

    // Faylni yopish
    fclose(fayl);

    // Natijalarni chiqarish
    printf("Fayldagi harflar soni: %d\n", harf_soni);
    printf("Fayldagi bo'sh joylar soni: %d\n", bosh_joy_soni);

    return 0;
}

Tushuntirish:

  1. fgetc(fayl); — fayldan har bir belgini o'qib beradi.

  2. isalpha(belgi) — bu funksiya belgi harf ekanligini tekshiradi.

  3. isspace(belgi) — bu funksiya belgi bo'sh joy ekanligini tekshiradi.

  4. Natija: Fayldagi barcha harflar va bo'sh joylar soni ekranga chiqariladi.

Natija:

Agar faylda quyidagi matn bo'lsa:

Salom, bu fayl.

Dastur ekranga quyidagini chiqaradi:

Fayldagi harflar soni: 11
Fayldagi bo'sh joylar soni: 3

Last updated