17-AMELIY
.pdf17-ámeliy. Fayllar menen islew. Tekstli fayllar haqqında ulıwma túsinik. Fayllar hám aǵımlar.
Jumıstıń maqseti: C++ tilinde programmanıń nátiyjelerin yamasa maǵlıwmatlardı qattı diskte (faylda) uzaq múddet saqlawdı úyreniw. <fstream> kitapxanasınan paydalanıp, tekstli fayllardı jaratıw, olarǵa maǵlıwmat jazıw hám olardan maǵlıwmat oqıw kónlikpelerin qáliplestiriw.
Teoriyalıq maǵlıwmatlar:
Búgingi kúnge shekem biz islegen programmalarımızdaǵı barlıq maǵlıwmatlar programma jumısın toqtatqan waqıtta operativ yadtan (RAM) óship ketetuǵın edi. Maǵlıwmatlardı turaqlı saqlaw ushın biz fayllardan paydalanamız.
Aǵım (Stream): C++ tilinde maǵlıwmatlardı kirgiziw-shıǵarıw ámelleri aǵımlar arqalı ámelge asırıladı. Aǵım - bul maǵlıwmatlardıń derekten (mısalı, klaviatura, fayl) qabıl etiwshige (mısalı, ekran, fayl) úziliksiz aǵıp baratuǵın baytlar izbeizligi. Biz cin (konsol'dan kirgiziw aǵımı) hám cout (konsol'ǵa shıǵarıw aǵımı) penen tanıspız. Fayllar menen islew ushın arnawlı fayl aǵımları bar.
<fstream> kitapxanası: Bul kitapxana fayllar menen islew ushın tómendegi tiykarǵı klaslardı usınadı:
1.ofstream (output file stream): Faylǵa maǵlıwmat jazıw (shıǵarıw) ushın qollanıladı. cout sıyaqlı << operatorı menen isley alasız.
2.ifstream (input file stream): Fayldan maǵlıwmat oqıw (kirgiziw) ushın qollanıladı. cin sıyaqlı >> operatorı menen isley alasız.
3.fstream: Bir waqıttıń ózinde faylǵa jazıw hám onnan oqıw ushın paydalanıladı.
Fayl menen islewdiń tiykarǵı basqıshları:
1.#include <fstream> direktivasın qosıw.
2.Kerekli aǵım klasınıń obyektin jaratıw (mısalı, ofstream myFile;).
3..open("fayl_ati.txt") metodı arqalı fayldı ashıw.
4..is_open() metodı arqalı fayldıń tabıslı ashılǵanın tekseriw.
5.Faylǵa jazıw (<<) yamasa onnan oqıw (>>, getline).
6..close() metodı arqalı fayldı jabıw. Bul júdá áhmiyetli, sebebi ózgerislerdi saqlaw hám resurslardı bosatıw ushın kerek.
Ámeliy mısallar:
1-Mısal: Faylǵa tekst jazıw (ofstream)
Bul mısalda biz "salem.txt" atlı fayl jaratamız hám oǵan birneshe qatar tekst jazamız. Eger bunday fayl aldınnan bar bolsa, onıń ishindegileri óship, ornına jańası jazıladı.
#include <iostream>
#include <fstream> // Fayllar menen islew ushın kitapxana
#include <string>
using namespace std;
int main() {
//1. Jazıw ushın fayl aǵımınıń obyektin jaratıw ofstream jazıwshı_fayl;
//2. Fayldı ashıw
jazıwshı_fayl.open("salem.txt");
// 3. Fayldıń tabıslı ashılǵanın tekseriw if (jazıwshı_fayl.is_open()) {
cout << "'salem.txt' faylı jaratıldı hám oǵan maǵlıwmat jazılmaqta..." << endl;
// 4. Faylǵa maǵlıwmat jazıw (cout sıyaqlı)
jazıwshı_fayl << "Sálem, bul meniń birinshi faylım!" << endl; jazıwshı_fayl << "C++ tilinde fayllar menen islew ájayıp." <<
endl;
string at;
cout << "Atıńızdı kirgiziń: "; cin >> at;
jazıwshı_fayl << "Paydalanıwshı atı: " << at << endl;
// 5. Fayldı jabıw (júdá áhmiyetli!) jazıwshı_fayl.close();
cout << "Maǵlıwmatlar faylǵa tabıslı jazıldı hám fayl jabıldı." << endl;
} else {
cout << "Fayldı ashıwda qátelik júz berdi!" << endl;
}
return 0;
}
Programmanı iske túsirgennen keyin, proektińiz jaylasqan papkadan salem.txt faylın tawıp, ishindegi tekstti kóriwińiz múmkin.
2-Mısal: Fayldan tekstti oqıw (ifstream)
Endi aldıńǵı mısalda jaratılǵan salem.txt faylınıń ishindegi maǵlıwmatlardı oqıp, konsolǵa shıǵaramız.
#include <iostream> #include <fstream>
#include <string>
using namespace std;
int main() {
//1. Oqıw ushın fayl aǵımınıń obyektin jaratıw ifstream oqıwshı_fayl;
string qatar;
//2. Fayldı ashıw
oqıwshı_fayl.open("salem.txt");
// 3. Fayldıń tabıslı ashılǵanın tekseriw if (oqıwshı_fayl.is_open()) {
cout << "'salem.txt' faylınıń ishindegi maǵlıwmatlar:" <<
endl;
cout << "------------------------------------- |
" << endl; |
//4. Fayldıń aqırına shekem qatarma-qatar oqıw while (getline(oqıwshı_fayl, qatar)) {
cout << qatar << endl;
}
//5. Fayldı jabıw
oqıwshı_fayl.close(); } else {
cout << "'salem.txt' faylın tabıw yamasa ashıw múmkin bolmadı!" << endl;
}
return 0;
}
getline(oqıwshı_fayl, qatar) funkciyası fayldan bir tolıq qatardı (jańa qatar belgisine shekem) oqıp, onı qatar ózgeriwshisine saqlaydı. Bul bos orınları bar gáplerdi oqıw ushın eń qolaylı usıl.
3-Mısal: Faylǵa maǵlıwmat qosıw (append mode)
Eger biz fayldı ashqanda onıń ishindegileri óship ketpesin, kerisinshe jańa maǵlıwmatlar aqırına qosılsın desek, fayldı ios::app (append - qosıw) rejiminde ashamız.
#include <iostream> #include <fstream>
using namespace std;
int main() {
//Fayldı qosıw (append) rejiminde ashıw
//Ashıw rejimleri | (vertikal sızıq) belgisi menen biriktiriledi ofstream jazıwshı_fayl("salem.txt", ios::out | ios::app);
if (jazıwshı_fayl.is_open()) {
cout << "Faylǵa jańa maǵlıwmatlar qosılmaqta... |
" << endl; |
jazıwshı_fayl << "--------------------------------- |
" << endl; |
jazıwshı_fayl << "Bul - fayldıń aqırına qosılǵan jańa qatar."
<< endl;
jazıwshı_fayl.close();
cout << "Maǵlıwmatlar tabıslı qosıldı." << endl;
} else {
cout << "Fayldı ashıwda qátelik!" << endl;
}
return 0;
}
Bul programmanı iske túsirip, salem.txt faylın qayta ashsańız, eski maǵlıwmatlar saqlanıp, jańa qatarlar aqırına qosılǵanın kóresiz.
Ámeliy tapsırmalar:
1.Login hám Parol saqlaw: Paydalanıwshıdan jańa login hám parol soraytuǵın programma dúziń. Bul maǵlıwmatlardı users.txt faylına "Login: [kirgizilgen_login], Parol: [kirgizilgen_parol]" formatında jazıń. Hár bir jańa paydalanıwshı fayldıń aqırına qosılıp barıwı kerek.
2.Sanlar dizimin oqıw hám esaplaw: Hár qatarında bir pútin san jazılǵan numbers.txt atlı fayldı qol menen jaratıń (mısalı, ishinde 10, 5, 25, 8 sanları bolsın). C++ programması arqalı usı fayldı oqıń, ishindegi barlıq sanlardıń qosındısın hám ortasha arifmetikalıq mánisin esaplap, nátiyjeni konsolǵa shıǵarıń.
3.Fayldan izlew: kitaplar.txt atlı faylda kitaplardıń atları qatarma-qatar jazılǵan dep esaplań. Paydalanıwshıdan bir kitap atın soraytuǵın programma dúziń. Programma sol kitap kitaplar.txt diziminde bar ma yamasa joq pa ekenin anıqlap, sáykes xabardı ekranǵa shıǵarsın.
4.Fayldı kóshiriw: Paydalanıwshıdan derek fayldıń atın (source.txt) hám jańa fayldıń atın (copy.txt) soraytuǵın programma dúziń. Programma source.txt faylınıń ishindegi barlıq maǵlıwmatlardı oqıp, copy.txt faylına kóshirip jazsın. Nátiyjede eki fayldıń ishinde birdey maǵlıwmat bolıwı kerek.
