ifstream
C++ ifstream sinfi
Misol
Fayldan qatorlarni o‘qish uchun ifstream sinfidan foydalaning:
// Create a text string, which is used to output the text file
string myText;
// Read from the text file
ifstream MyReadFile("filename.txt");
// Use a while loop together with the getline() function to read the file line by line
while (getline (MyReadFile, myText)) {
// Output the text from the file
cout << myText;
}
// Close the file
MyReadFile.close();
Ta’rif va qo‘llanilishi
ifstream sinfi ("input file stream" — kiruvchi fayl oqimi so‘zlarining qisqartmasi) fayllardan o‘qish uchun ishlatiladi.
ifstream sinfi <fstream> sarlavha faylida aniqlangan.
Faylni ochish uchun fayl yo‘lini konstruktorga uzating:
ifstream MyReadFile("filename.txt");
ifstream sinfida fayldan ma’lumot o‘qishning ko‘plab usullari bor. Oson usullardan biri — keyingi qator ko‘chishigacha bo‘lgan barcha belgilarni o‘qib, ularni stringga yozish uchun getline() funksiyasidan foydalanish.
Fayldagi matnning bir qatorini chiqaring:
string myText;
getline(MyReadFile, myText);
cout << myText;
Fayldan o‘qish funksiyalari
Fayldan o‘qish funksiyalari fayldan belgilarni ajratib oladi va fayl ko‘rsatkichini siljitadi.
get()
get() metodi fayldan bitta belgini o‘qiydi va uning ASCII qiymatini int qiymat sifatida qaytaradi. Belgini ko‘rish uchun uni char tipiga o‘tkazing. Fayl ko‘rsatkichi fayldagi keyingi belgiga o‘tadi.
char myChar = MyReadFile.get();
cout << myChar;
get(destination, size, delimiter) metodi fayldan o‘qilgan ma’lumotlardan ko‘pi bilan size ta belgini manzilga (destination) yozadi. U qator ko‘chishiga, fayl oxiriga yoki delimiter parametri orqali berilgan ixtiyoriy belgiga yetishi bilanoq o‘qishni to‘xtatadi. destination parametriga yozilgan qiymat har doim \0 null belgisi bilan tugaydi. Bu metod fayl ko‘rsatkichini o‘qish to‘xtagan qator ko‘chishi yoki ajratuvchi belgiga o‘tkazadi.
char destination[20];
MyReadFile.get(destination, 20);
cout << destination << "\n";
// Stop reading when a '.' is found
MyReadFile.get(destination, 20, '.');
cout << destination << "\n";
getline()
getline(destination, size, delimiter) metodi get(destination, size, delimiter) metodi bilan bir xil, faqat qator ko‘chishi yoki ajratuvchi belgi tashlab yuboriladi va fayl ko‘rsatkichi undan keyingi belgiga o‘tkaziladi.
char destination[20];
MyReadFile.getline(destination, 20);
cout << destination << "\n";
// Stop reading when a '.' is found
MyReadFile.getline(destination, 20, '.');
cout << destination << "\n";
Shunga o‘xshash getline(stream, destination, delimiter) funksiyasi ham bor: u stream parametridagi ifstream obyekti ko‘rsatgan fayldan keyingi qator ko‘chishigacha (yoki ixtiyoriy delimiter belgisigacha) bo‘lgan barcha belgilarni o‘qiydi va ularni destination ko‘rsatgan stringga yozadi.
string destination;
getline(MyFile, destination);
cout << destination << "\n";
// Stop reading when a '.' is found
getline(MyFile, destination, '.');
cout << destination << "\n";
read()
read(destination, n) metodi fayldan ko‘pi bilan n ta belgini o‘qiydi va ularni ko‘rsatilgan char massivida saqlaydi. U qator ko‘chishlarida to‘xtamaydi va null belgisini qo‘shmaydi. Natijadan string sifatida foydalanmoqchi bo‘lsangiz, massivga '\0' belgisini qo‘lda qo‘shishingiz kerak.
char destination[20];
MyReadFile.read(destination, 19);
destination[19] = '\0'; // Make sure it ends with a null terminating character
cout << destination << "\n";
peek()
peek() metodi fayldan bitta belgini o‘qiydi va uning ASCII qiymatini int qiymat sifatida qaytaradi. Belgini ko‘rish uchun uni char tipiga o‘tkazing. get() metodidan farqli o‘laroq, bu metod fayl ko‘rsatkichini siljitmaydi.
char myChar = MyReadFile.peek();
cout << myChar;
gcount()
gcount() metodi eng so‘nggi chaqirilgan fayldan o‘qish metodi fayldan ajratib olgan belgilar sonini qaytaradi.
char destination[20];
MyReadFile.getline(destination, 20);
cout << MyReadFile.gcount() << "\n";
Fayllar bilan ishlash funksiyalari
Fayllar bilan ishlash funksiyalari fayllarni ochadi, yopadi va ular ichida harakatlanish imkonini beradi.
open()
open(filepath) metodi filepath ko‘rsatgan yo‘ldagi faylni ochadi. Agar fayl allaqachon ochiq bo‘lsa, bu metod hech qanday ta’sir ko‘rsatmaydi.
ifstream MyReadFile;
MyReadFile.open("filename.txt");
is_open()
is_open() metodi fayl ochiq bo‘lsa true, hech qanday fayl ochiq bo‘lmasa false qaytaradi.
ifstream MyReadFile;
cout << MyReadFile.is_open(); << "\n"; // Displays 0 because the file is not open
MyReadFile.open("filename.txt");
cout << MyReadFile.is_open(); << "\n"; // Displays 1 because the file is open
close()
close() metodi faylni yopadi. Resurslarni bo‘shatish uchun fayl bilan ishlashni tugatgach, uni yopib qo‘ygan ma’qul.
MyReadFile.close();
rdbuf()
rdbuf() metodi fayl bilan bevosita ishlaydigan ichki filebuf obyektiga ko‘rsatkich qaytaradi.
filebuf * buf = MyReadFile.rdbuf();
unget()
unget() metodi fayl ko‘rsatkichini bir belgi orqaga siljitadi.
Bitta belgini ikki marta chop etish uchun unget() metodidan foydalaning:
char myChar = MyReadFile.get();
cout << myChar << "\n";
MyReadFile.unget();
myChar = MyReadFile.get();
cout << myChar;
seekg()
seekg(position) metodi fayl ko‘rsatkichini fayl boshiga nisbatan belgilangan pozitsiyaga o‘tkazadi.
MyReadFile.seekg(6)
seekg(position, origin) metodi fayl ko‘rsatkichini fayldagi origin nuqtasiga nisbatan belgilangan position pozitsiyasiga o‘tkazadi. Boshlang‘ich nuqta (origin) uchta qiymatdan birini olishi mumkin:
ifstream::beg- Pozitsiya fayl boshiga nisbatan olinadi.ifstream::cur- Pozitsiya fayldagi joriy pozitsiyaga nisbatan olinadi.ifstream::end- Pozitsiya fayl oxiriga nisbatan olinadi.
Fayl ko‘rsatkichini turli pozitsiyalarga o‘tkazing:
MyReadFile.seekg(6, ifstream::beg);
cout << MyReadFile.tellg(); << "\n";
MyReadFile.seekg(-3, ifstream::cur);
cout << MyReadFile.tellg(); << "\n";
MyReadFile.seekg(-4, ifstream::end);
cout << MyReadFile.tellg(); << "\n";
tellg()
tellg() metodi fayl ko‘rsatkichining fayldagi joriy pozitsiyasini qaytaradi.
cout << MyReadFile.tellg();
Ajratib olish (extraction) operatori
>> ajratib olish operatori fayldagi joriy pozitsiyadan bir nechta belgini o‘qiydi, ularni talqin qiladi va talqin qilingan qiymatni o‘zgaruvchiga yozadi. So‘ngra fayl ko‘rsatkichi hali o‘qilmagan keyingi belgiga o‘tkaziladi. Belgilarning qanday talqin qilinishi o‘zgaruvchining ma’lumot tipiga bog‘liq.
Sintaksis
MyReadFile >> variable
Faylning qismlarini birin-ketin o‘qish uchun undan bir necha marta foydalanish ham mumkin.
MyReadFile >> variable1 >> variable2 >> variable3
>> ajratib olish operatori avval bo‘shliq belgilarini (bo‘sh joylar, tabulyatsiyalar va qator ko‘chishlari) bo‘shliq bo‘lmagan birinchi belgiga yetguncha o‘tkazib yuboradi. Shundan so‘ng u o‘zgaruvchining ma’lumot tipiga qarab quyidagi jadvalda ko‘rsatilgan qoidalarga amal qiladi.
| Ma’lumot tipi | Tavsif | Misollar |
|---|---|---|
intlongshort
|
Raqamlar ketma-ketligini o‘qiydi va uni butun son sifatida talqin qiladi. Ketma-ketlik oldidan ishora ("+" yoki "-") kelishi mumkin. U raqam bo‘lmagan birinchi belgida o‘qishni to‘xtatadi. Agar to‘g‘ri ketma-ketlik topilmasa, ifstream obyekti xato holatiga o‘tadi va keyingi o‘qishni to‘xtatadi. |
15 |
bool |
Butun sonni yuqorida tavsiflangan usulda o‘qiydi, so‘ngra 0 ni false, 1 ni esa true deb talqin qiladi. Boshqa har qanday butun son true deb talqin qilinadi, lekin ifstream obyekti xato holatiga o‘tadi va keyingi o‘qishni to‘xtatadi.Keyingi bo‘limda tavsiflangan boolalpha manipulyatori bu xatti-harakatni butunlay o‘zgartiradi. |
0 |
floatdouble
|
To‘g‘ri belgilar ketma-ketligini o‘qiydi va uni suzuvchi nuqtali son sifatida talqin qiladi. To‘g‘ri ketma-ketlikda kamida bitta raqam bo‘ladi, uning oldidan ishora ("+" yoki "-"), ortidan esa o‘nlik nuqta va kasr raqamlari kelishi mumkin. Ilmiy yozuvdan (son, undan keyin "e" yoki "E" va bir nechta raqam) ham foydalanish mumkin. Agar to‘g‘ri ketma-ketlik topilmasa, ifstream obyekti xato holatiga o‘tadi va keyingi o‘qishni to‘xtatadi. |
5 |
char
|
Fayldan bitta belgini o‘qiydi. Agar fayl ko‘rsatkichi fayl oxirida bo‘lsa, ifstream obyekti xato holatiga o‘tadi va keyingi o‘qishni to‘xtatadi. |
B |
stringchar *
|
Keyingi bo‘shliq belgisi (bo‘sh joy, tabulyatsiya yoki qator ko‘chishi), null belgisi yoki fayl oxirigacha bo‘lgan barcha belgilarni o‘qiydi. O‘zgaruvchi qiymatiga \0 null belgisi qo‘shiladi.Agar fayl ko‘rsatkichi allaqachon null belgisida yoki fayl oxirida turgan bo‘lsa, ifstream obyekti xato holatiga o‘tadi va keyingi o‘qishni to‘xtatadi. |
Hello |
Manipulyatorlar
O‘zgaruvchi o‘rnida manipulyatordan foydalanish mumkin. Manipulyatorlar ishlatilganda ular ifstream obyekti ma’lumotlarni qanday talqin qilishini o‘zgartiradi. Manipulyatorning ta’siri uni boshqa manipulyator o‘zgartirmaguncha saqlanib qoladi.
Quyidagi jadvalda ifstream obyekti foydalanishi mumkin bo‘lgan manipulyatorlar ro‘yxati keltirilgan.
| Manipulyator | Tavsif |
|---|---|
noskipws |
>> ajratib olish operatori bo‘shliq belgilarini o‘tkazib yuborish o‘rniga ularni o‘qiydi. Bu asosan char tipidagi o‘zgaruvchilar uchun foydali, chunki boshqa ma’lumot tiplarida u bo‘shliq belgisiga duch kelganda o‘qishni to‘xtatadi. |
skipws |
noskipws manipulyatori kiritgan o‘zgarishni bekor qiladi. |
ws |
Fayl ko‘rsatkichini fayldagi bo‘shliq belgisi bo‘lmagan keyingi pozitsiyaga o‘tkazadi. |
hex |
Butun sonli o‘zgaruvchilar ishlatilganda sonlarning o‘n oltilik ko‘rinishi (0 dan 9 gacha raqamlar va A dan F gacha harflar) kutiladi. |
oct |
Butun sonli o‘zgaruvchilar ishlatilganda sonlarning sakkizlik ko‘rinishi (0 dan 7 gacha raqamlar) kutiladi. |
dec |
Butun sonli o‘zgaruvchilar ishlatilganda sonlarning o‘nlik ko‘rinishi (0 dan 9 gacha raqamlar) kutiladi. Bu hex va oct manipulyatorlari kiritgan o‘zgarishni bekor qiladi. |
boolalpha |
Boolean o‘zgaruvchi uchun ma’lumot o‘qilayotganda butun son o‘rniga "true" yoki "false" belgilar ketma-ketligini qidiradi. |
noboolalpha |
boolalpha manipulyatori kiritgan o‘zgarishni bekor qiladi. |
Misol
Ma’lumotlar qanday talqin qilinishini o‘zgartirish uchun manipulyatorlardan foydalaning:
bool myBool;
int myInt;
// Interpret character sequences "true" and "false" as boolean values
MyFile >> boolalpha >> myBool;
// Revert to reading booleans normally
MyFile >> noboolalpha;
// Read hexadecimal numbers from the file and interpret them as integers
MyFile >> hex >> myInt;
// Revert to reading integers normally
MyFile >> dec;
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
