•
Програм зохиогчид тулгарч болох олон асуудлын нэг нь програмынхаа үр дүнг хадгалах явдал.
•
Энгийн програм үр дүнгээ дэлгэцэнд гаргаж үзүүлнэ. Гэхдээ ингэснээр үр дүнг зөвхөн шуурхай санах ойд хадгалж буй хэрэг бөгөөд програм дуусахад үр дүн устана.
•
Тиймээс үр дүнгээ байнга хадгалъя гэвэл тогтмол санах ой буюу хатуу дискэнд файл хэлбэрээр хадгалах хэрэгтэй юм.
•
C++ хэлэнд Урсгал(Stream) хэмээх ойлголтын тусламжтайгаар файлтай ажилладаг.
Урсгал
•
Урсгал гэдэг нь ямар нэг эх үүсвэрээс ямар нэг хүлээн авагч руу мэдээлэл (өгөгдөл) дамжих процессыг илэрхийлсэн хийсвэр ойлголт. Арай тодорхой хэлбэл, мэдээллийг үүсгэж буй эсвэл мэдээллийг хүлээн авч буй бодит хэрэгслийг төлөөлсөн логик хэрэгсэл(logical device) юм.
•
Дэлгэц, гар г.м. оролт-гаралтын хэрэгсэл, хатуу диск дээр байрлах файл зэргийг урсгалтай холбож (ө.х. урсгалаар илэрхийлж) болдог байна. Ингэснээр тэдгээртэй шууд харьцаж ажиллахын оронд тус бүрийг нь төлөөлсөн урсгалтай ажиллана гэсэн үг.
Стандарт урсгал
•
Гар ба дэлгэцийг төлөөлсөн урсгалуудыг стандарт урсгалууд(standard streams) гэдэг. Стандарт урсгалуудыг дотор нь:
Стандарт оролт(standard input) –гарыг төлөөлсөн урсгал
Стандарт гаралт(standard output) –дэлгэцийг төлөөлсөн урсгал
•
Энгийн үгээр тайлбарлавал, програмаас дэлгэц рүү чиглэсэн урсгал, гараас програм руу чиглэсэн урсгал байна гэсэн үг. Гаралт юм уу оролтын үйлдэл хийхийн тулд эдгээр урсгал руу өгөгдлийг илгээнэ гэсэн үг.
•
Бидний мэдэх cout, cinбол стандарт урсгалууд юм.
Файлын урсгал
•
Хэрэв програм файлтай ажиллаж байвал энэ нь файлыг төлөөлсөн урсгалтай ажиллаж буй хэрэг болно. Ийм урсгалыг файлын урсгал(file stream) гэдэг.
•
Ө.х. програмаас файл руу чиглэсэн ба файлаас програм руу чиглэсэн урсгал байна гэсэн үг.
•
Тэгээд файлаас өгөгдөл унших юм уу файл руу өгөгдөл дамжуулахын тулд харгалзах урсгал руу тэр өгөгдлөө илгээнэ гэсэн үг. Урсгал руу илгээсэн өгөгдөл цаашаа хүлээн авагч руу “урсаж” орно.
Буфер
•
Үнэн хэрэгтээ файлын урсгалтай ажиллах процесс буфер(buffer) хэмээн нэрлэгдэх завсрын санах ойг дамжин явагддаг байна. Буфер нь мэдээллийг түрхэн зуур хадгалах зориулалттай, тусгай санах ой юм.
•
Урсгал руу бичиж буй үед, мэдээлэл буферт хуримтлагдаж байгаад, буфер дүүрсэн эсвэл тэр буферыг сулла гэсэн команд өгөгдсөн үед ганц удаагийн хандалтаар шууд дискэн дэхь файл руу шилжинэ. Урсгалаас уншиж буй үед мэдээлэл буферт хадгалагдаж байгаад харгалзах команд өгөгдсөн үед програм руу илгээгдэж, харин буфер цэвэрлэгдэнэ.
•
Буферт агуулагдаж буй өгөгдлийг гаргаж авах процессыг bufferflushхэмээн нэрийднэ.
Хийсвэрлэлийн давуу тал
•
Ингэжурсгал(stream)хэмээх ойлголт оруулж ирэн, файлтай мэдээлэл солилцох процессыг хийсвэрлэснээр үйлдлийн системээс үл хамаарах давуу тал бий болдог. Ингэснээр тухайн програм нэг системээс нөгөө рүү (эсвэл нэг төрлийн компьютерээс нөгөө рүү) ямар нэг өөрчлөлтгүйгээр зөөгдөх боломжтой болдог байна.
Толгой файл
•
Стандарт урсгалыг ашиглахын тулд харгалзах толгой файлыг програмдаа оруулах ёстой болно. Энэ нь бидний мэдэх iostream.hфайл юм:
#include<iostream.h>
•
Харин файлын урсгалыг ашиглахын тулд fstream.hтолгой файлыг оруулах хэрэгтэй:
#include<fstream.h>
Файлын урсгалын хэлбэрүүд
•
C++ хэлэнд файлын урсгалын 3 хэлбэр бий:
ofstream
Файл руу бичих урсгал
ifstream
Файлаас унших урсгал
fstream
Файлаас унших ба бичих урсгал
Урсгал нээх ба хаах
•
Програм нь файлтай ажиллахын тулд дараах үйлдлүүдийг хийх ёстой юм:
1.
Урсгал үүсгэх
2.
Үүсгэсэн урсгалыг нээж, файлтай холбох
3.
Урсгал (файлтай) дээр шаардлагатай оролт, гаралтын үйлдлүүдээ хийх
4.
Урсгалыг хаах (файлыг хаах)
Урсгал үүсгэх
•
Файл руу бичих урсгал үүсгэх:
ofstreammyfile;
•
Файлаас унших урсгал үүсгэх:
ifstreammyfile;
•
Унших ч бичих ч боломжтой унших урсгал үүсгэх:
fstreammyfile;
•
Энд myfile–урсгалын оноосон нэр.
Урсгалыг нээж файлтай холбох
•
myfile.open("file1.txt");
Үүсгэсэн урсгалаа нээж, file1.txt гэсэн файлтай холбож байна.
•
ofstream-ийн тохиолдолд, диск дээр нэр бүхий файл байхгүй байсан бол шинээр үүснэ, байсан бол зүгээр нээгдэнэ.
•
ifstream-ийн хувьд, диск дээр нэр бүхий файл байхгүй байсан бол юу ч хийгдэхгүй. fstream-ийн хувьд мөн адил.
Урсгал руу бичих, урсгалаас унших
Урсгал руу бичих, урсгалаас унших гэдэг нь түүнтэй холбогдсон файл руу бичиж байна, файлаас уншиж байна гэсэн үг.
•Урсгалыг хаах
Урсгал руу бичих: Харьцуулаад үз:
myfile<<“Hello!”; --------- cout<<“Hello!”;
•
Урсгалаас унших:
myfile>>x; --------- cin>>x;
•
Урсгалыг нээж, файлтай холбоод шаардлагатай оролт, гаралтын үйлдлүүдийг хийсний дараа дахиж файлтай ажиллахгүй гэсэн тохиолдолд урсгалыг заавал хааж байх нь зүйтэй:
myfile.close();
Ингэснээр энэ урсгалтай холбогдсон байсан файл (манай тохиолдолд file1.txt) хаагдаж байна гэсэн үг.
Жишээ програм
•
Дурдсан бүхнийг нэгтгээд дараах жишээ програмыг авч үзье.
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
main(){
ofstream f;
f.open("file1.txt");
f<<"Hello";
f.close();
cout<<"File created";
getch();
}
•
Энэ програм ажилласны дараа диск дээр, програмын эх файл байрлах тэр газарт file1.txt, гэсэн текст файлууд үүссэн байх болно. Файл дотор “Hello”гэсэн үг агуулагдана.
•
Өмнөх жишээндүүсгэсэн file2.txtфайлын доторхыг дэлгэцэнд хэвлэн гаргая. Үүний тулд тэр файлаас өгөгдөл унших хэрэгтэй юм. Зөв уншихын тулд унших хэлбэр нь өгөгдлийг бичсэн хэлбэртэй адилхан байх хэрэгтэй. Харин түүнийг нь бид мэдэж байгаа. Тухайлбал бид файл дотор хэдэн мөр байгааг мэднэ. Тиймээс мөрийн тоогоор цикл хийж байна.
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#define N 5
main(){
ifstreamf;
inti,x;
f.open("file2.txt");
for(i=0;i<=N-1;i++){
f>>x;
cout<<x<<endl;
}
f.close();
cout<<"Unshij duusav.";
getch();
}
•
Харин мөрийн тоо урьдаас мэдэгдэхгүй тохиолдолд яах вэ? Тухайлбал манай програм мөрийн тоо нь харилцан адилгүй өөр өөр файлыг унших хэрэгтэй болвол яах вэ?
•
eof()гэсэн функцыг ашиглах хэрэгтэй. Энэ нь файлын төгсгөлийг заадаг функц. Унших процесс файлын төгсгөлд хүрсэн бол true,хүрээгүй үед falseутгатай байдаг.
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
main(){
ifstream f;
int x;
f.open("file2.txt");
while(!f.eof()){
f>>x;
cout<<x<<endl;
}
f.close();
cout<<"End of file reached";
getch();
}
•
y=x2функцыг -5≤x≤5 завсарт, бодуулж x, y-ийн утгыг 2 баганад доош цувуулж file3.txt файлд хадгалж байгаа нь.
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
main(){
ofstream f;
int x, y;
f.open("file3.txt");
for(x=-5;x<=5;x++){
y=x*x;
f<<x<<‘\t’<<y<<‘\t’<<endl;
}
f.close();
cout<<"Bichigdev!";
getch();
}
ЭХ ХУВИЛБАР
Юуны өмнө маш их баярлалаа. Блогоо улам хөгжүүлж баяжуулвал надад болоод надтай адил олон хүнд тус болох байх. C++ ийн хичээл илүү ихийг оруулж өгөөрэй.
ReplyDeleteАсуух юум байна fstream f1 дээрээ бичигдсэн юумаа 2 жишээгээ эхлэхдээ автоматаар цэврэлдэг болгомоор байна. яах вэ?
ReplyDelete