Fayllarni kiritish va chiqarish, ular bilan ishlash asoslari


Download 0.76 Mb.
Sana05.01.2022
Hajmi0.76 Mb.
#229463
Bog'liq
2.18.Fayllar(1)

Fayllarni kiritish va chiqarish, ular bilan ishlash asoslari

  • Fayllar
  • Fayl – nomga ega bo’lgan diskdagi soha.
  • Fayllar
  • Formatlanmagan matnlarni oladi
  • ACSII (1 baytli simvol
  • UNICODE (2 baytli simvol)
  • *.txt, *.log,
  • *.htm, *.html
  • Jadval kodlaridagi ixtiyoriy simvollarni olishi mumkin
  • *.doc, *.exe,
  • *.bmp, *.jpg,
  • *.wav, *.mp3,
  • *.avi, *.mpg
  • matnli
  • Ikkilikli
  • Papkalar (kataloglar)
  • Sendvich prinsipi
  • I etap. Faylni ochish (uni ishga tayyorlash va uni
  • faollashtirish)
  • f = fopen("qq.dat", “r");
  • II etap: fayl bilan ishlash
  • III etap: faylni yopish
  • fclose ( f );
  • fprintf( f, "n=%d", n ); // n qiymatni yozish
  • ("r", англ. read) faqat o’qish uchun
  • f = fopen("qq.dat", "w");
  • ("w", англ. write) faqat yozish uchun
  • f = fopen("qq.dat", "a");
  • ("a", англ. append) faqat yangilash uchun
  • O’zgaruvci tipi
  • «faylga ko’rsatkich»: FILE *f;
  • Fayllar bilan ishlash
  • Xususiyatlari:
    • Fayl nomi faqat fopen komandasida keltiriladi, unga murojaat esa f ko’rsatkichi orqali amalga oshiriladi;
    • O’qilishi kerak bo’lgan fayl mavjud bo’lishi kerak
    • Agarda yozilishi kerak bo’lgan fayl mavjud bo’lsa, uni ichidagi archa ma’lumotlar o’chiriladi
    • Ma’lumotlar matn ko’rinishida faylga yoziladi
    • Qachonki dastur tugasa avtomatik ravishda barcha fayllar o’chiriladi
    • Fayl yopilganidan keyin f o’zgaruvchini boshqa fayllar bilan ishlashda foydalanish mumkin
  • Fayllar bilan ishlashga misol (standart)
  • int main()
  • {
  • int a, b;
  • cin>>a>>b;
  • cout<
  • getch();
  • return 0;
  • }
  • freopen ("kfayl.txt", "r", stdin);
  • freopen ("chfayl.txt", "w", stdout );
  • // getch();
  • Ketma-ket murojaat
  • Fayl ochilganda kursor boshida joylahsadi
  • Faylni o’qish kursor turan joydan boshlanadi
  • O’qish ochilgandan so’ng kursor birinchi o’qilmagan simvol tomon harakatlanadi
  • 12 5 45 67 56●
  • Fayl oxiri
  • (end of file, EOF)
  • 12 5 45 67 56●
  • f = fopen("qq.dat", "r");
  • fscanf ( f, "%d", &x );
  • Qanday orqaga qaytiladi?
  • ?
  • Faylni ochishdagi xatolik
  • FILE *f;
  • f = fopen("qq.dat", "r");
  • if ( f == NULL ) {
  • puts(“fayl topilmadi.");
  • return;
  • }
  • NULL
  • faylni nomi noto’g’ri
  • fayl yo’q
  • fayl boshqa dastur tominidan ishlatilmoqda
  • !
  • FILE *f;
  • f = fopen("qq.dat", "w");
  • if ( f == NULL ) {
  • puts(“fayl ochilmadi.");
  • return;
  • }
  • NULL
  • fayl nomi noto’g’ri
  • fayl «faqat o’qih uchun»
  • fayl boshqa dastur tominidan ishlatilmoqda
  • Misol
  • Masala: input.txt faylida sonlar ustun ko’rinishida yozilgan. Ularning soni noma’lum. output.txt faylga ularni summasini yozing.
  • Algoritm:
    • input.txt faylni o’qish uchun ochish.
    • S = 0;
    • x o’zgaruvchiga birin ketin qiymatlarni olib chiqish.
    • Agar qiymat olinmasa 7 qadamga o’tish.
    • S += x;
    • 3 qadamga o’tish.
    • input.txt faylni yopish.
    • output.txt faylni yozish uchun ochish.
    • S ning qiymatini faylga yozish.
    • output.txt faylni yopish.
  • Massivsiz ishlasa bo’ladimi?
  • ?
  • «hali qiymat bormi» shart sikli
  • Sonlar tugaganligini qanday aniqlash mumkin?
  • FILE *f;
  • int n, x;
  • f = fopen("input.txt", "r");
  • ...
  • n = fscanf ( f, "%d", &x );
  • if ( n ! = 1 )
  • puts ( “Sonni o’qib bo’lmadi" );
  • fscanf funksiyasi quyidagi qiymatlarni chiqaradi o’qilgan sonlar sonini;
    • 0, agarda faylni o’qishda xatolik bo’lsa;
    • – 1, agarda faylni oxirigi borilsa.
  • !
  • fayl oxiriga borildi
  • «sonni» uchratilmadi
  • Dastur
  • main()
  • {
  • FILE *f;
  • int n, x, S = 0;
  • f = fopen ( "input.txt", "r" );
  • if ( f == NULL ) {
  • printf(“Fayl topilmadi.");
  • return;
  • }
  • while ( 1 ) {
  • n = fscanf ( f, "%d", &x );
  • if ( n != 1 ) break;
  • S += x;
  • }
  • fclose ( f );
  • f = fopen ( "output.txt", "w" );
  • fprintf ( f, "S = %d", S );
  • fclose ( f );
  • }
  • Faylni ochishda xatolik
  • Ma’lumotlarni o’qish sikli: n  1 da chiqish.
  • Natijani yozish
  • Vazifa
  • input.txt faylida no’malum sondagi butun sonlar berilgan.
  • 1 Undagi barcha sonlarni o’rta arifmetigini toping va natijani output.txt fayliga yozing.
  • 2 Eng katta va eng kichik elementlarini toping va natijani output.txt fayliga yozing.
  • Massivlarni qayta ishlash
  • Masala: input.txt faylda sonlar untun shaklida berilgan. Soni noma’lum, lekin 100 tadan ko’p emas. Bu sonlarni o’soash output.txt tartibida faylga yozing.
  • Muammo:
    • Saralash uchun barcha sonlarni xotiraga olish kerak (massiv);
    • Sonlar soni noma’lum.
  • Yechish:
    • Xotiradan 100 ta elementga joy ajrating;
    • O’qilgan sonlarni massivga yozing va uni sonini N ga beramiz;
    • Massivni N ta elementini saralang;
    • Ularni faylga yozamiz.
  • Massivlarni bajarsa bo’ladimi?
  • ?
  • Ma’lumotlarni massivga yozish
  • int ReadArray ( int A[], char fName[], int MAX )
  • {
  • int N = 0, k;
  • FILE *f;
  • f = fopen ( fName, "r" );
  • while ( 1 ) {
  • k = fscanf ( f, "%d", &A[N]);
  • if ( k != 1 ) break;
  • N ++;
  • if ( N >= MAX ) break;
  • }
  • fclose(f);
  • return N;
  • }
  • Fayldan massivni o’quvchi funksiya elementlar sonini chiqaradi (kamida MAX):
  • massiv
  • fayl nomi
  • chegara
  • … yoki massiv to’ldi
  • Dastur
  • main()
  • {
  • int A[100], N, i;
  • FILE *f;
  • N = ReadArray ( A, "input.txt", 100 );
  • ... // N ta elementni saralash
  • f = fopen("output.txt", "w");
  • for ( i = 0; i < N; i ++)
  • fprintf ( f, "%d\n", A[i] );
  • fclose ( f );
  • }
  • int ReadArray(int A[], char fName[], int MAX)
  • {
  • ...
  • }
  • saralangan massivni faylga chiqarish
  • for (i = 0; i < N-1; i ++){
  • for (j = N-2; j >= i ; j --)
  • if ( A[j] > A[j+1] ) {
  • c = A[j];
  • A[j] = A[j+1];
  • A[j+1] = c;
  • }
  • }
  • Vazifa
  • input.txt faylda sonlar untun shaklida berilgan. Soni noma’lum, lekin 100 tadan ko’p emas.
  • 2: Оxirgi raqamini kamayishi bo’yicha massivni saralang va natijani output.txt faylga yozing.
  • 3: Raqamlarni yi’g’indisi bo’yicha massivni saralang va natijani output.txt faylga yozing.
  • Matnli fayllarni qayta ishlash
  • Vazifa: input.txt faylida matn berilgan. Satrda “anaqa” so’zi ko’p ishlatilgan. Matnni bu so’zdan xalos eting va output.txt faylga yozing.
  • input.txt fayli:
    • Oyi, anaqa, derazani, anaqa, yuvdim.
    • Dada, anaqa, yo’l kiraga, anaqa, pul bering, iltimos.
    • Gul, anaqa, gulzorda, anaqa, yaxshi ochiladi.
    • Har bir talaba, anaqa, beshga olishni xoxlaydi.
  • output.txt natija fayli:
    • Oyi darazani yuvdim.
    • Dada yo’l kiraga pul bering iltimos.
    • Gul gulzorda yaxshi ochiladi.
    • har bit talaba besh olishni xoxlaydi.
  • Matnli fayllarni qayta ishlash
  • Muhimligi:
    • Bir vaqtda ikkita fylni ochish lozim (bittasini o’qish, ikkinchisini yozish uchun).
  • Algoritm:
    • Ikkala fayl ham ochiq.
    • Satrni o’qish.
    • ", anaqa,“ barcha so’zni ochiring.
    • Satrni ikkinchi faylga yozish.
    • 2-qadamga o’tish.
    • Ikkala faylni yopish.
  • Ma’lumotlar tugamadimi
  • Fayllar bilan ishlash
  • main()
  • {
  • char s[80], *p;
  • int i;
  • FILE *fIn, *fOut;
  • fIn = fopen("input.txt", "r");
  • fOut = fopen("output.txt", "w");
  • ... // faylni qayta ishlash
  • fclose(fIn);
  • fclose(fOut);
  • }
  • Fayllarka ko’rsatkich
  • faylni o’qish uchun ochish
  • faylni yozish uchun ochish
  • Qidirish uchun ko’rsatkich
  • faylni yopish
  • Matnlarni qayta ishlash
  • s satrni o’qish :
  • while ( 1 ) {
  • p = strstr ( s, ", anaqa," );
  • if ( p == NULL ) break;
  • strcpy ( p, p + 9 );
  • }
  • qidirish", anaqa,"
  • 9 ta simvolni o’chirish
  • agar topilmasa sikldan chiqarish
  • char s[80], *p;
  • FILE *fIn;
  • ... // faylni ochish
  • p = fgets ( s, 80, fIn );
  • if ( p == NULL )
  • printf(“fayl tugadi.");
  • else printf(“O’qilgan satrlar:\n%s", s);
  • s satrni qayta ishlash :
  • satr
  • uzunligi
  • fayl
  • #include
  • Fayllarni qayta ishlashni to’liq sikli
  • while ( 1 ) {
  • p = fgets ( s, 80, fIn );
  • if ( p == NULL ) break;
  • while ( 1 ) {
  • p = strstr ( s, ", anaqa," );
  • if ( p == NULL ) break;
  • strcpy ( p, p + 9 );
  • }
  • fputs ( s, fOut );
  • }
  • while ( 1 ) {
  • p = strstr ( s, ", anaqa," );
  • if ( p == NULL ) break;
  • strcpy ( p, p + 9 );
  • }
  • Agarda satr bo’lmasa sikldan chiqarish
  • Satrni qayta ishlash
  • “tozalangan" satrni yozish
  • Satrni o’qish
  • Vazifa
  • input.txt faylda nechtaligi noma’lum bo’lgan satrlar yozilgan.
  • 4:Matndagi barcha «qisqasi» ni «anaqa» ga almashtiring va output.txt faylga yozing.
  • 5: Matndagi barcha «anaqa» ni «qisqasi» ga almashtiring va output.txt faylga yozing..
  • int main() {
  • FILE *fIn, *fOut; fIn = fopen("input.txt", "r"); fOut = fopen("output.txt", "w");
  • string a,b,s,key1="anaqa",key2="yaxshi";
  • char str[1000];
  • int i,j,n,l1=key1.size(),l2=key2.size();
  • bool f;
  • while(fgets(str,1000,fIn))
  • {
  • s = str; n = s.size();
  • for(i=0;i
  • {
  • f=1;
  • for(j=0;j
  • if (s[i+j]!=key1[j]) {f=0; break;}
  • if (f)
  • { s.erase(s.begin()+i,s.begin()+i+l1);
  • s.insert(s.begin()+i,key2.begin(),key2.end());
  • n = s.size();
  • i=i+l2 - 1;
  • }
  • }
  • fputs(s.c_str(),fOut); } return 0;}
  • Ikkilik fayllari
  • Muhimligi:
  • Ma’lumotlar mashina formatida saqlanadi (matnli redaktorda o’qib bo’lmaydi)
  • Xotiradan biror qismini o’qishimiz va yozishimiz mumkin (faqat bitlarda…)
  • Sendvich prinsipi (ochish – ishlash – yopish)
  • Faylga ko’rsatkich orqali murojaat.
  • Faylli ko’rsatkich
  • FILE *fp;
  • Ikkilik faylni ochish va yopish
  • Faylni ochish
  • fp = fopen ( "input.dat", "rb" );
  • "rb" = read binary (oqish)
  • "wb" = write binary (yozish)
  • "ab" = append binary (qo’sish)
  • Ochishdagi xatolik
  • if ( fp == NULL ) { printf(“fayl ochilmadi.");
  • }
  • Faylni yopish
  • fclose ( fp );
  • Blok bo’yicha o’qish
  • Massiv boshidan o’qish
  • int A[100];
  • n = fread ( A, sizeof(int), 100, fp );
  • Xotiradagi manzil(«qaerga»):
  • A  &A[0]
  • Bitta blok o’lchami
  • Butun tipli o’zgaruvchi o’lchami
  • Bloklar soni
  • Faylga ko’rsatkich
  • O’qilganlar
  • Massiv o’rtasidan o’qish
  • int A[100];
  • n = fread ( A+5, sizeof(int), 2, fp );
  • 2 ta butun son o’qiladi:
  • A[5], A[6]
  • Bloklar bo’yicha o’qish
  • int A[100];
  • n = fwrite( A, sizeof(int), 100, fp );
  • Xotiradagi soha manzili(«qayerdan»):
  • A  &A[0]
  • Bitta blok o’lchami
  • Butun tipli o’zgaruvchi o’lchami
  • Bloklar soni
  • Faylga ko’rsatkich
  • yozilganlar
  • Massivni alohida elementlarini yozish
  • int A[100];
  • n = fwrite( A+5, sizeof(int), 2, fp );
  • 2 ta butun son o’qiladi:
  • A[5], A[6]
  • Matrisa bilan ishlash
  • Xotirada saqlash: satr bo’yicha (С, Paskal)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Matrisalarga yozish
  • int A[3][3];
  • FILE *fp = fopen("output.dat", "wb");
  • ... // matrisani to’ldirish
  • n = fwrite( A, sizeof(int), 9, fp );
  • Misol
  • Masala: input.dat fayldagi massiv elementlarini o’qing va ularni 2 ga ko’paytirib natijani faylga output.dat yoizing.
  • Dastur tuzilish:
  • #include
  • main()
  • {
  • const int N = 10;
  • int i, A[N], n;
  • FILE *fp;
  • // input.dat faylidan o’qish
  • for ( i = 0; i < n; i ++ )
  • A[i] = A[i] * 2;
  • // output.dat fayliga yozish
  • }
  • O’qilganlar
  • Fayllar bilan ishlash
  • fp = fopen( "input.dat", "rb" );
  • if ( fp == NULL ) {
  • printf(“fayl ochilmadi.");
  • return;
  • }
  • n = fread ( A, sizeof(int), N, fp );
  • if ( n < N ) printf(“faylda ma’lumotlar etishmayapdi"); fclose ( fp );
  • Ma’lumotlarni o’qish:
  • fp = fopen( "output.dat", "wb" );
  • fwrite ( A, sizeof(int), n, fp );
  • fclose ( fp );
  • Ma’lumotlarni yozish:
  • kritik xatolik
  • kritik bo’lmagan xatolik
  • qancha o’qildi
  • Vazifa
  • 6 input.txt matnli faylda butun sonlar berilgan. Ularni saralang va output.dat ikkilik faylga yozing.
  • 7 input1.txt va input2.txt matnli fayllarda massivlar berilgan. Ularni bitta massivga birlashtiring, saralang vanatijani ikkilik formatda output.dat faylga yozing.

Download 0.76 Mb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling