ݺߣ

ݺߣShare a Scribd company logo
Файлын
оролт гаралт
Lecture 9
Programming Language
Агуулга:
 <stdio.h>толгой файл
 Файлтай ажиллах үед гарсан алдааг илрүүлэх
 Дараалласан хандалттай файл
 Файлийг боловсруулах
Файл гэж юу вэ?
 Файл/File/ гэдэг мэдээллийн сан/архив гэсэн утгатай
англи үг юм.
 Файл гэдэг нь гадаад зөөгч дээр мэдээлэл хадгалах
зорилгоор үүссэн тодорхой нэрлэгдсэн байр юм.
Файл гэж юу вэ?
 Мэдээллийн диск дээрх нэрлэгдсэн мужийг физик файл
гэдэг. Гарнаас мэдээлэл оруулахад удаан, дэлгэсэнд
гаргасан мэдээлэл хадгалагддаггүй зэрэг нь мэдээллийг
диск дээр хадгалах шаардлагыг бий болгоно. Мэдээллийг
диск дээр нэг удаа хадгалаад дараа нь дахин дахин уншиж
ашиглах, засварлах боломжтой.
 Мэдээллийг диск дээр файл хэлбэрээр хадгална.
Мэдээллийг дискэд гаргах (Output), дискнээс оруулах
(Input) процессийг урсгал( stream) гэдэг.
 Програмд хэрэглэгдэж байгаа файлын төрлийн хувьсагч
буюу физик файлын програм дахь тодорхойлолтыг
(төлөөлөгчийг) логик файл гэдэг. Програмд логик файл нь
ямар нэг төрөлтэй (эсвэл төрөлгүй) файлын төрлийн
хувьсагч байдлаар тодорхойлогддог.
Физик файлын бүтэц
Байт Байт Байт . . . Байт Байт EOF
Физик файлын бүтэц энгийн байтуудын дараалал
байдалтайгаар хадгалагддаг.
Логик файлын бүтэц
 Логик файлын бүтэц-ийг физик файлын бүтцийг
харах хэв загвар гэж үзэж болно. Програмчлалын
хэлэнд энэ хэв загвар нь файлын агуулгад хандах
өгөгдлийн төрөл болдог.
 Файлын элементийн тоо нь тухайн агшинд
тодорхойгүй байдаг ба үүнийг тодорхойлохдоо
файлын төгсгөлд EoF буюу ASCII 26 кодтой тэмдэгтийг
бичиж өгдөг. Файлын элементийн тоог програмын
явцад өөрчилж болно.
<stdio.h>толгой файл
Си хэлэнд оролт гаралтын функцуудыг stdio.h толгой файлд
тодорхойлсон байдаг.
Файлыг:
1.Текст файл
2.Бинар файл гэж хоѐр ангилна.
 Тэмдэгт өгөгдөл агуулсан файлыг текст файл, бусад
төрлийн файлыг бинар файл гэж нэрлэнэ.
Текст файлыг ямар нэг editor ашиглан үүсгээд, нэр
өргөтгөлийг нь өгөөд хадгалж болно. Текст файл нь
тэмдэгтүүдийн мөрийг агуулах ба дэс дараалсан
хандалттай файл юм. Түүний мөрийн төгсгөлд ‘n’ тэмдэг,
файлын төгсгөлд ASCII 26 кодтой Ctrl+z тэмдэгт байрлана.
<stdio.h>толгой файл
Бинар файл нь шууд хандалттай файл юм.
Иймд файлыг хандах аргаар нь:
Дэс дараалсан хандалттай
Шууд хандалттай гэж 2 ангилдаг.
Хандах гэдэг нь мэдээллийг унших, бичих процесс юм.
Файлын эхнээс байт байтаар хандахыг дэс дараалсан
,шаардлагатай элементэд шууд хандахыг шууд
хандах гэдэг.
Файлд хандахад:
1.Файлын нэр буюу физик файлын нэр
2.Файлын төрлийн хувьсагчийн нэр буюу логик файлын
нэр хэрэглэгдэнэ.
Файлын төрлийн хувьсагчийн нэрийг файлаас барих
бариул(handle) гэдэг. Програмаас файлыг нээмэгц
нээсэн функц нь уг файлын дотоод нэрийг буцаана. Уг
дотоод нэрийг ашиглан файлд бичих, файлаас унших,
файлыг хаах гэх мэт үйлдлийг хийнэ. Дотоод нэр нь
файлын хэмжээ(байт), байрлал(хаана байгаа) зэрэг
мэдээллийг агуулна. Дотоод нэр нь файл төрлийн
хувьсагч байна. Жишээ нь: FILE *f, *fhandle гэх мэт.
Файлтай ажиллах
 Файлтай ажиллахад
1.Файл нээх,
2.Файлаас мэдээлэл унших,
3.Файлд мэдээлэл бичих,
4.Файл хаах гэсэн дөрвөн үйлдэл хийнэ.
Си хэлэнд файлтай ажиллах ихэнх функц f үсгээр
эхэлсэн байдаг.
Файл нээх
 Файлыг fopen функцаар нээнэ. Энэ функц нь FILE*
төрлийн заагч буюу нээгдсэн файлын дугаарыг
буцаадаг. Файл амжилттай нээгдсэн бол тэгээс
ялгаатай утга буцаана.
 <файлын_логик_нэр>=fopen(<файлын_
физик_нэр>,<нээх_горим>);
 Үүнд: <файлын_физик_нэр> - файлын нэр болох
тэмдэгт төрлийн заагч, нээх горим дорх хандах
горим юм
Файл нээх
 Үүнд: Файлыг нээх горим:
Горим Зорилго
“r” Байгаа файлыг уншихаар нээнэ.
“w” Бичихээр шинэ файл нээх. (Ижил нэртэй файл байвал устгаад)
“a” Файлын төгсгөлд мэдээлэл нэмж бичихээр нээх. Хэрвээ файл
байхгүй бол шинээр нээнэ.
“r+” Өмнө байгаа файлыг унших ба нэмж бичихээр нээх.
“w+” Файлыг унших ба нэмж бичихээр нээх. Ижил нэртэй файл байвал
мэдээлэл нь устана.
“a+” Файлын төгсгөлд мэдээлэл нэмж бичих уншихаар нээх. Файл байхгүй
бол шинээр нээнэ.
“rb” Бинар файлыг уншихаар нээх. (Шууд хандалттай файл)
“wb” Бинар файлыг бичихээр нээх. (Шууд хандалттай файл)
“ab” Бинар файлд мэдээлэл нэмж бичихээр нээх. (Шууд хандалттай
файл)
Файл нээх
 Жишээ: f=fopen("score.txt","r"); энэ нь score.txt файлыг
уншихаар нээнэ.
 Хэрэв байхгүй файлыг нээхээр оролдвол fopen
функц макро NULL утгыг буцаадаг. Үүнийг ашиглан
нээх үйлдэл амжилттай болсон эсэхийг хянана. Энэ
үед perror функц ашиглан ямар алдаа гарч байгааг
мэдэж болно. Хэрэв алдаа гарвал програмын
биелэлтийг exit функцээр зогсооно.
Жишээ нь:
FILE *f;
if ((f=fopen("score.txt","r"))==NULL)
{ perror(“score.txt fopen");
exit(1); /* stdlib.h санд байдаг функц */
}
Энэ жишээнд score.txt файлыг цаашид f функц
төлөөлнө.
Файл хаах
 Файлыг fclose функцаар хаана.
fclose(<файлын_логик_нэр>);
 Энэ функц файл амжилттай хаагдвал тэг утга, үгүй
бол тэг биш EOF утга буцаана. EOF нь End of File –
файлын төгсгөлийг заасан тогтмол.
 Жишээ нь:
if (fclose(f)==EOF)
{ perror(“score.txt fclose");
exit(1); /* stdlib.h санд байдаг функц */
}
Файлтай ажиллахдаа дээрх хоѐр үйлдлийг заавал хийх
хэрэгтэй.
Унших ба бичих үйлдэл.
 Текст файл stream-аас char-тэмдэгт эсвэл buffer-тэмдэгт
мөр унших, эсвэл түүнд бичих функцууд:
 fgetc(FILE *stream) - Файлаас нэг тэмдэгт уншиж,
амжилттай бол уншсан тэмдэгтийг үгүй бол EOF утга
буцаана.
 getc(FILE *stream) - Файлаас мөн адил нэг тэмдэгт
уншина
 fgets(buffer, n byte, FILE *stream) - Файлаас n урттай(byte)
мөр эсвэл мөр шилжих тэмдэгт хүртлэх мөрийг уншиж
buffer-буфер луу бичнэ. Тэмдэгт мөрийн төгсгөлд ASCII 0
тэмдэгтийг бичдэг. Амжилттай ажилласан бол бичсэн
тэмдэгт мөрийн хаягийг, алдаа гарсан эсвэл файлын
төгсгөлд хүрсэн бол NULL утга буцаана.
Унших ба бичих үйлдэл.
 fputc(char, FILE *stream) - Файлд нэг тэмдэгт(char)-ийг
бичнэ. Функц амжилттай бол char тэмдэгтийг үгүй
бол EOF утга буцаана.
 putc(char, FILE *stream) - Файлд мөн адил нэг тэмдэгт
бичнэ
 fputs(buffer, FILE *stream) - Файлд buffer-буферийн
мөрийг бичнэ. Амжилттай ажилласан -бол сөрөг биш
бүхэл тоо, алдаа гарсан бол EOF утга буцаана.
Унших ба бичих үйлдэл.
Текст файлд формат хэлбэрээр бичих ба файлаас
формат хэлбэрээр унших функцууд:
 fprintf(FILE *stream, const char *format[, argument, . . . ]);
- stream файлд format-д заасан хэлбэр бүхий
мэдээллийг бичнэ.
 format-мөрөнд бичих мэдээллийн хэвшүүлэлтийг өгөх
ба энэ нь printf() функцынхтай адил (номын хуудас
22-23) байна. Функц амжилттай биелэсэн бол файлд
бичсэн байтын тоо, алдаа гарсан бол EOF утга
буцаана. Жишээлбэл double төрлийн d утгыг файлд
таслалаас өмнө 8 орны зайтай, таслалаас хойш 2
орны нарийвчлалтай бичнэ гэвэл: fprintf(pr, “%8.2t”,d);
гэж өгнө.
Унших ба бичих үйлдэл.
 fscanf(FILE *stream, const char *format[, argument, . . . ]);
- stream файлаас format-д заасан хэлбэр бүхий
мэдээллийг уншина. format-мөрөнд унших
мэдээллийн хэвшүүлэлтийг өгөх ба энэ нь scanf()
функцынхтай адил байна. Функц амжилттай
биелэсэн бол файлаас уншсан байтын тоо, алдаа
гарсан бол EOF утга буцаана.
Жишээ. score.txt файлд хадгалагдсан оюутны
онооны дундажийг хэвлэ.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{ FILE *fhandle;
if ((fhandle=fopen("score.txt","r"))==NULL)
{ perror("score.txt fopen");
exit(1);
}
int score,too=0,sum=0;
while (!feof(fhandle)&&!ferror(fhandle))
{ fscanf(fhandle,"%d",&score) ;
sum+=score;
too++;
}
printf("dundaj:%dn",sum/too);
if (fclose(fhandle)==EOF)
{ perror("score.txt(fclose)");
exit(1);}
getch();}
Дээрх жишээнд
файлаас мэдээллийг
уншихад хоѐр зүйл
тохиолдож болно.
Уншиж байгаад
файлын төгсгөлд хүрэх
үүнийг feof()
функцаар, алдаа
гарах үүнийг ferror()
функцаар тус тус
хянана.
Эдгээр функц нь тэг
эсвэл тэг биш утга
буцаана.
Файлтай ажиллах
функцуудын ангилал:
 Нээх, хаах:fopen, freopen, fdopen, fflush,
flushall, fileno, fclose, fcloseall
 Мэдээлэл унших, бичих:feof, fgetc,
fgetchar, fgets, fprintf, fputc, fputs
 Файлын заагч(курсор)-ийг удирдах:fgetpos,
fseek, fsetpos, ftell, rewind
 Ажиллаж байх үеийн алдааг хянах:clearerr,
ferror, perror, strerror,
 Файл устгах, нэр өөрчлөх, бусад:remove,
rename, rmtmp, tempnam, tmpfile, tmpnam
Асуулт:
 Нээх, хаах файлууд юу вэ?
 Файлын унших ба бичих үйлдлийн тухай тайлбарлана уу.
 Файлыг хэд ангилдаг вэ?

More Related Content

Файлын оролт гаралт

  • 2. Агуулга:  <stdio.h>толгой файл  Файлтай ажиллах үед гарсан алдааг илрүүлэх  Дараалласан хандалттай файл  Файлийг боловсруулах
  • 3. Файл гэж юу вэ?  Файл/File/ гэдэг мэдээллийн сан/архив гэсэн утгатай англи үг юм.  Файл гэдэг нь гадаад зөөгч дээр мэдээлэл хадгалах зорилгоор үүссэн тодорхой нэрлэгдсэн байр юм.
  • 4. Файл гэж юу вэ?  Мэдээллийн диск дээрх нэрлэгдсэн мужийг физик файл гэдэг. Гарнаас мэдээлэл оруулахад удаан, дэлгэсэнд гаргасан мэдээлэл хадгалагддаггүй зэрэг нь мэдээллийг диск дээр хадгалах шаардлагыг бий болгоно. Мэдээллийг диск дээр нэг удаа хадгалаад дараа нь дахин дахин уншиж ашиглах, засварлах боломжтой.  Мэдээллийг диск дээр файл хэлбэрээр хадгална. Мэдээллийг дискэд гаргах (Output), дискнээс оруулах (Input) процессийг урсгал( stream) гэдэг.  Програмд хэрэглэгдэж байгаа файлын төрлийн хувьсагч буюу физик файлын програм дахь тодорхойлолтыг (төлөөлөгчийг) логик файл гэдэг. Програмд логик файл нь ямар нэг төрөлтэй (эсвэл төрөлгүй) файлын төрлийн хувьсагч байдлаар тодорхойлогддог.
  • 5. Физик файлын бүтэц Байт Байт Байт . . . Байт Байт EOF Физик файлын бүтэц энгийн байтуудын дараалал байдалтайгаар хадгалагддаг.
  • 6. Логик файлын бүтэц  Логик файлын бүтэц-ийг физик файлын бүтцийг харах хэв загвар гэж үзэж болно. Програмчлалын хэлэнд энэ хэв загвар нь файлын агуулгад хандах өгөгдлийн төрөл болдог.  Файлын элементийн тоо нь тухайн агшинд тодорхойгүй байдаг ба үүнийг тодорхойлохдоо файлын төгсгөлд EoF буюу ASCII 26 кодтой тэмдэгтийг бичиж өгдөг. Файлын элементийн тоог програмын явцад өөрчилж болно.
  • 7. <stdio.h>толгой файл Си хэлэнд оролт гаралтын функцуудыг stdio.h толгой файлд тодорхойлсон байдаг. Файлыг: 1.Текст файл 2.Бинар файл гэж хоѐр ангилна.  Тэмдэгт өгөгдөл агуулсан файлыг текст файл, бусад төрлийн файлыг бинар файл гэж нэрлэнэ. Текст файлыг ямар нэг editor ашиглан үүсгээд, нэр өргөтгөлийг нь өгөөд хадгалж болно. Текст файл нь тэмдэгтүүдийн мөрийг агуулах ба дэс дараалсан хандалттай файл юм. Түүний мөрийн төгсгөлд ‘n’ тэмдэг, файлын төгсгөлд ASCII 26 кодтой Ctrl+z тэмдэгт байрлана.
  • 8. <stdio.h>толгой файл Бинар файл нь шууд хандалттай файл юм. Иймд файлыг хандах аргаар нь: Дэс дараалсан хандалттай Шууд хандалттай гэж 2 ангилдаг. Хандах гэдэг нь мэдээллийг унших, бичих процесс юм. Файлын эхнээс байт байтаар хандахыг дэс дараалсан ,шаардлагатай элементэд шууд хандахыг шууд хандах гэдэг.
  • 9. Файлд хандахад: 1.Файлын нэр буюу физик файлын нэр 2.Файлын төрлийн хувьсагчийн нэр буюу логик файлын нэр хэрэглэгдэнэ. Файлын төрлийн хувьсагчийн нэрийг файлаас барих бариул(handle) гэдэг. Програмаас файлыг нээмэгц нээсэн функц нь уг файлын дотоод нэрийг буцаана. Уг дотоод нэрийг ашиглан файлд бичих, файлаас унших, файлыг хаах гэх мэт үйлдлийг хийнэ. Дотоод нэр нь файлын хэмжээ(байт), байрлал(хаана байгаа) зэрэг мэдээллийг агуулна. Дотоод нэр нь файл төрлийн хувьсагч байна. Жишээ нь: FILE *f, *fhandle гэх мэт.
  • 10. Файлтай ажиллах  Файлтай ажиллахад 1.Файл нээх, 2.Файлаас мэдээлэл унших, 3.Файлд мэдээлэл бичих, 4.Файл хаах гэсэн дөрвөн үйлдэл хийнэ. Си хэлэнд файлтай ажиллах ихэнх функц f үсгээр эхэлсэн байдаг.
  • 11. Файл нээх  Файлыг fopen функцаар нээнэ. Энэ функц нь FILE* төрлийн заагч буюу нээгдсэн файлын дугаарыг буцаадаг. Файл амжилттай нээгдсэн бол тэгээс ялгаатай утга буцаана.  <файлын_логик_нэр>=fopen(<файлын_ физик_нэр>,<нээх_горим>);  Үүнд: <файлын_физик_нэр> - файлын нэр болох тэмдэгт төрлийн заагч, нээх горим дорх хандах горим юм
  • 12. Файл нээх  Үүнд: Файлыг нээх горим: Горим Зорилго “r” Байгаа файлыг уншихаар нээнэ. “w” Бичихээр шинэ файл нээх. (Ижил нэртэй файл байвал устгаад) “a” Файлын төгсгөлд мэдээлэл нэмж бичихээр нээх. Хэрвээ файл байхгүй бол шинээр нээнэ. “r+” Өмнө байгаа файлыг унших ба нэмж бичихээр нээх. “w+” Файлыг унших ба нэмж бичихээр нээх. Ижил нэртэй файл байвал мэдээлэл нь устана. “a+” Файлын төгсгөлд мэдээлэл нэмж бичих уншихаар нээх. Файл байхгүй бол шинээр нээнэ. “rb” Бинар файлыг уншихаар нээх. (Шууд хандалттай файл) “wb” Бинар файлыг бичихээр нээх. (Шууд хандалттай файл) “ab” Бинар файлд мэдээлэл нэмж бичихээр нээх. (Шууд хандалттай файл)
  • 13. Файл нээх  Жишээ: f=fopen("score.txt","r"); энэ нь score.txt файлыг уншихаар нээнэ.  Хэрэв байхгүй файлыг нээхээр оролдвол fopen функц макро NULL утгыг буцаадаг. Үүнийг ашиглан нээх үйлдэл амжилттай болсон эсэхийг хянана. Энэ үед perror функц ашиглан ямар алдаа гарч байгааг мэдэж болно. Хэрэв алдаа гарвал програмын биелэлтийг exit функцээр зогсооно.
  • 14. Жишээ нь: FILE *f; if ((f=fopen("score.txt","r"))==NULL) { perror(“score.txt fopen"); exit(1); /* stdlib.h санд байдаг функц */ } Энэ жишээнд score.txt файлыг цаашид f функц төлөөлнө.
  • 15. Файл хаах  Файлыг fclose функцаар хаана. fclose(<файлын_логик_нэр>);  Энэ функц файл амжилттай хаагдвал тэг утга, үгүй бол тэг биш EOF утга буцаана. EOF нь End of File – файлын төгсгөлийг заасан тогтмол.  Жишээ нь: if (fclose(f)==EOF) { perror(“score.txt fclose"); exit(1); /* stdlib.h санд байдаг функц */ } Файлтай ажиллахдаа дээрх хоѐр үйлдлийг заавал хийх хэрэгтэй.
  • 16. Унших ба бичих үйлдэл.  Текст файл stream-аас char-тэмдэгт эсвэл buffer-тэмдэгт мөр унших, эсвэл түүнд бичих функцууд:  fgetc(FILE *stream) - Файлаас нэг тэмдэгт уншиж, амжилттай бол уншсан тэмдэгтийг үгүй бол EOF утга буцаана.  getc(FILE *stream) - Файлаас мөн адил нэг тэмдэгт уншина  fgets(buffer, n byte, FILE *stream) - Файлаас n урттай(byte) мөр эсвэл мөр шилжих тэмдэгт хүртлэх мөрийг уншиж buffer-буфер луу бичнэ. Тэмдэгт мөрийн төгсгөлд ASCII 0 тэмдэгтийг бичдэг. Амжилттай ажилласан бол бичсэн тэмдэгт мөрийн хаягийг, алдаа гарсан эсвэл файлын төгсгөлд хүрсэн бол NULL утга буцаана.
  • 17. Унших ба бичих үйлдэл.  fputc(char, FILE *stream) - Файлд нэг тэмдэгт(char)-ийг бичнэ. Функц амжилттай бол char тэмдэгтийг үгүй бол EOF утга буцаана.  putc(char, FILE *stream) - Файлд мөн адил нэг тэмдэгт бичнэ  fputs(buffer, FILE *stream) - Файлд buffer-буферийн мөрийг бичнэ. Амжилттай ажилласан -бол сөрөг биш бүхэл тоо, алдаа гарсан бол EOF утга буцаана.
  • 18. Унших ба бичих үйлдэл. Текст файлд формат хэлбэрээр бичих ба файлаас формат хэлбэрээр унших функцууд:  fprintf(FILE *stream, const char *format[, argument, . . . ]); - stream файлд format-д заасан хэлбэр бүхий мэдээллийг бичнэ.  format-мөрөнд бичих мэдээллийн хэвшүүлэлтийг өгөх ба энэ нь printf() функцынхтай адил (номын хуудас 22-23) байна. Функц амжилттай биелэсэн бол файлд бичсэн байтын тоо, алдаа гарсан бол EOF утга буцаана. Жишээлбэл double төрлийн d утгыг файлд таслалаас өмнө 8 орны зайтай, таслалаас хойш 2 орны нарийвчлалтай бичнэ гэвэл: fprintf(pr, “%8.2t”,d); гэж өгнө.
  • 19. Унших ба бичих үйлдэл.  fscanf(FILE *stream, const char *format[, argument, . . . ]); - stream файлаас format-д заасан хэлбэр бүхий мэдээллийг уншина. format-мөрөнд унших мэдээллийн хэвшүүлэлтийг өгөх ба энэ нь scanf() функцынхтай адил байна. Функц амжилттай биелэсэн бол файлаас уншсан байтын тоо, алдаа гарсан бол EOF утга буцаана.
  • 20. Жишээ. score.txt файлд хадгалагдсан оюутны онооны дундажийг хэвлэ. #include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *fhandle; if ((fhandle=fopen("score.txt","r"))==NULL) { perror("score.txt fopen"); exit(1); } int score,too=0,sum=0; while (!feof(fhandle)&&!ferror(fhandle)) { fscanf(fhandle,"%d",&score) ; sum+=score; too++; } printf("dundaj:%dn",sum/too); if (fclose(fhandle)==EOF) { perror("score.txt(fclose)"); exit(1);} getch();} Дээрх жишээнд файлаас мэдээллийг уншихад хоѐр зүйл тохиолдож болно. Уншиж байгаад файлын төгсгөлд хүрэх үүнийг feof() функцаар, алдаа гарах үүнийг ferror() функцаар тус тус хянана. Эдгээр функц нь тэг эсвэл тэг биш утга буцаана.
  • 21. Файлтай ажиллах функцуудын ангилал:  Нээх, хаах:fopen, freopen, fdopen, fflush, flushall, fileno, fclose, fcloseall  Мэдээлэл унших, бичих:feof, fgetc, fgetchar, fgets, fprintf, fputc, fputs  Файлын заагч(курсор)-ийг удирдах:fgetpos, fseek, fsetpos, ftell, rewind  Ажиллаж байх үеийн алдааг хянах:clearerr, ferror, perror, strerror,  Файл устгах, нэр өөрчлөх, бусад:remove, rename, rmtmp, tempnam, tmpfile, tmpnam
  • 22. Асуулт:  Нээх, хаах файлууд юу вэ?  Файлын унших ба бичих үйлдлийн тухай тайлбарлана уу.  Файлыг хэд ангилдаг вэ?