ifstream

C++ ifstream sinfi

❮ fstream sinflari


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(); 

Misolni ishga tushirish »


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
int
long
short
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
+125
 -30
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
   1
 +01
float
double
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
-5.46
+2e4
-1.62E-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
string
char *
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;

❮ fstream sinflari

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!