fstream kutubxonasidagi ifstream sinfi aniqlanganidan so`ng, 2-qator ushbu kutubxona faylini chaqiradi.
8-qator natijalar.txt fayli uchun, ifstream sinfidan input ob’yektini yaratadi.
Oqimni chiqarish operatori (>>)dan foydalanib, xuddi cin ob’yektidagi kabi input ob’yektidan ham ma’lumot o`qitishimiz mumkin. 8.2-rasmda keltirilganidek, 15-19-qatorlarda satrli va sonli qiymatlar input ob’yektidan o`qiladi.
close() funksiyasi (23-qator) ob’yekt uchun ma’lumotlar oqimini yopish uchun qo`llanilgan. Kiritish faylini yopish majburiy emas, ammo mavjud resurslarning fayllar tomonidan egallab olmasliklari uchun uni yopish yaxshi amaliy ahamiyatga ega.
Kiritish oqimini quyidagi konstruktorda foydalanib ochishimiz mumkin:
ifstream input("natijalar.txt");
2-rasm. Kiritish oqimi fayldan ma’lumot o`qiydi. Bu ko`rsatma satri quyidagi bilan ekvivalentdir:
ifstream input;
input.open("natijalar.txt");
Ogohlantirish. Ma’lumotni to`g`ri o`qish uchun, ma’lumot qanday yozilganligini aniq bilish lozim. Masalan, 8.2-kodli ro`yxatdagi dastur agar fayl double turidagi o`nli kasr ko`rinishidagi sonlardan iborat bo`lsa ishlamaydi.
Faylning mavjud ekanligi qanday tekshiriladi? Faylning oxirini tekshirish qanday amalga oshiriladi?
Agar faylni o`qishda fayl mavjud bo`lmasa, dasturimiz ishga tushadi va noto`g`ri natija beradi. Xo`sh, bizning dasturimiz fayl bor yoki yo`qligini tekshira oladimi? Ha. Biz open funksiyasidan so`ng darxol fail( ) funksiyasini chaqirishimiz mumkin. Agar fail( ) funksiyasi true qiymat qaytarsa, u fayl mavjud emasligidan darak beradi.
1 // Faylni ochish 2 input.open("natijalar.txt");
3
4 if(input.fail())
5 {
6 cout << "File does not exist"<< endl;
7 cout << "Exit program"<< endl;
8
9 return 0;
10 }
getline va get funksiyalarininig farqlari nimalardan iborat?
Oqimni kiritish operatori (>>)dan foydalangan holda ma’lumotlarni o`qishda bir muammoga duch kelamiz. Ma’lumotlar bo`sh joylar (oraliqlar) bilan ajratilgan. Agar satr qismlari bo`sh joylar bilan ajratilgan bo`lsa nima bo`ladi? O`tgan semestrda, tarkibida bo`sh jo`ylari mavjud bo`lgan satrlarni getline funksiyasi orqali o`qitishni o`rgangan edik. Biz aynan o`sha funksiyadan fayldagi satrli ma’lumotlarni o`qitishda ham foydalanishimiz mumkin. getline funksiyasi sintaksisiga qayta murojaat qilamiz:
getline(ifstream& input, int string s, char delimitChar)
Funksiya belgilarni o`qishdan chegaraviy belgi yoki tasodifiy ravishda fayl so`ngi kelganda to`xtaydi. Agar chegaraviy belgiga duch kelinsa, u o`qiladi, ammo massivga yozilmaydi. Uchinchi argument – delimitChar jimlik qoidasiga ko`ra (‘\n’) qiymatga ega. getline funksiya iostream - kutubxona faylida aniqlangan.
Faraz qilaylik, panjara (#) belgisi orqali ajratilgan shtatlar nomlaridan iborat bo`lgan, shtat.txt deb nomlangan fayl yaratilgan. Fayl tarkibi quyidagi diagrammada tasvirlangan:
8.6-kodli ro`yxatda fayldan shtatlarni o`quvchi dastur berilgan.
8.6-kodli ro`yxat. ReadCity.cpp 1 #include 2 #include 3 #include 4 using namespace std;
5
6 int main()
7 {
8 // Faylni ochish 9 ifstream input("shtat.txt");
10
11 if(input.fail())
12 {
13 cout << "Fayl mavjud emas!"<< endl;
14 cout << "Dasturdan chiqish"<< endl;
15 return 0;
16 }
17
18 // Ma’lumotlarni o`qish 19 string city;
20
21 while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom etish 22 {
23 getline(input, city, '#');
24 cout << city << endl;
25 }
26
27 input.close();
28
29 cout << "Bajarildi!"<< endl;
30
31 return 0;
32 }
Natija: