- Fayl – nomga ega bo’lgan diskdagi soha.
- 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
- I etap. Faylni ochish (uni ishga tayyorlash va uni
- faollashtirish)
- f = fopen("qq.dat", “r");
- II etap: fayl bilan ishlash
- 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;
- 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)
- freopen ("kfayl.txt", "r", stdin);
- freopen ("chfayl.txt", "w", stdout );
- Fayl ochilganda kursor boshida joylahsadi
- Faylni o’qish kursor turan joydan boshlanadi
- O’qish ochilgandan so’ng kursor birinchi o’qilmagan simvol tomon harakatlanadi
- Fayl oxiri
- (end of file, EOF)
- f = fopen("qq.dat", "r");
- Faylni ochishdagi xatolik
- FILE *f;
- f = fopen("qq.dat", "r");
- if ( f == NULL ) {
- puts(“fayl topilmadi.");
- return;
- }
- 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;
- }
- fayl nomi noto’g’ri
- fayl «faqat o’qih uchun»
- fayl boshqa dastur tominidan ishlatilmoqda
- 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
- 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 );
- }
- Ma’lumotlarni o’qish sikli: n 1 da chiqish.
- 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):
- 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;
- }
- }
- 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.
- 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);
- }
- faylni o’qish uchun ochish
- faylni yozish uchun ochish
- Qidirish uchun ko’rsatkich
- while ( 1 ) {
- p = strstr ( s, ", anaqa," );
- if ( p == NULL ) break;
- strcpy ( p, p + 9 );
- }
- 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);
- 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
- “tozalangan" satrni yozish
- 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;}
- 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.
- Ikkilik faylni ochish va yopish
- fp = fopen ( "input.dat", "rb" );
- "rb" = read binary (oqish)
- "wb" = write binary (yozish)
- "ab" = append binary (qo’sish)
- if ( fp == NULL ) { printf(“fayl ochilmadi.");
- }
- int A[100];
- n = fread ( A, sizeof(int), 100, fp );
- Xotiradagi manzil(«qaerga»):
- A &A[0]
- Butun tipli o’zgaruvchi o’lchami
- int A[100];
- n = fread ( A+5, sizeof(int), 2, fp );
- 2 ta butun son o’qiladi:
- A[5], A[6]
- int A[100];
- n = fwrite( A, sizeof(int), 100, fp );
- Xotiradagi soha manzili(«qayerdan»):
- A &A[0]
- Butun tipli o’zgaruvchi o’lchami
- 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]
- Xotirada saqlash: satr bo’yicha (С, Paskal)
- int A[3][3];
- FILE *fp = fopen("output.dat", "wb");
- ... // matrisani to’ldirish
- n = fwrite( A, sizeof(int), 9, fp );
- 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
- }
- 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 );
- fp = fopen( "output.dat", "wb" );
- fwrite ( A, sizeof(int), n, fp );
- fclose ( fp );
- 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.
Do'stlaringiz bilan baham: |