Kompyuter injinering ” fakulteti 103-guruh talabasi eshnazarov Rustam ning dasturlash fanidan mustaqil ishi №8


Download 0.97 Mb.
bet5/7
Sana11.02.2023
Hajmi0.97 Mb.
#1189947
1   2   3   4   5   6   7
Bog'liq
2 5327958925562086610

getline(input, state, '#') charilishi (23-qator) orqali, shtat massiviga belgilar # belgisiga yoki fayl so`ngiga kelgunicha o`qiladi.
Ko`p qo`llaniluvchi, qolgan ikkita funksiyalar – get va put. Kiritish ob’yektida bitta belgini o`qish uchun get funksiyasini, bitta belgini yozish uchun esa, put funksiyasini chaqirishimiz mumkin.
get funksiyasining ikki xil versiyasi mavjud:
char get() // Belgi qaytarish
ifstream* get(char& ch) // Belgini ch ga o`qish
Birinchi versiya kiritish ob’yektidan belgini qaytaradi. Ikkinchi versiyasi belgili argumentning havolasini yuboradi, belgini kiritish ob’yektidan o`qiydi va uni ch ga yozadi. Shuningdek bu funksiya, kiritish (input) ob’yekti ishlatganda, unga havolani yuboradi.
put funksiyasining sarlavha qismi quyidagicha:
void put(charch)
U ma’lum bir belgini chiqarish (output) ob’yektiga yozadi.
8.7-kodli ro`yxatda bu ikki funksiyadan foydalanishga doir misol berilgan. Dastur foydalanuvchidan faylni kiritishni so`raydi va uni yangi faylga nusxalaydi.
8.7-kodli ro`yxat. CopyFile.cpp
1 #include
2 #include
3 #include
4 using namespace std;
5
6 int main()
7 {
8 // Manbaa faylni kiritish
9 cout << " Manbaa fayl nomini kiriting: ";
10 string kirishFaylNomi;
11 cin >> kirishFaylNomi;
12
13 // Ko`zlangan faylni kiritish
14 cout << "Ko`zlangan fayl nomini kiriting: ";
15 string chiqishFaylNomi;
16 cin >> chiqishFaylNomi;
17
18 // Kirish va chiqish oqimlarini hosil qilish
19 ifstream input(kirishFaylNomi.c_str());
20 ofstream output(chiqishFaylNomi.c_str());
21
22 if(input.fail())
23 {
24 cout << kirishFaylNomi << " mavjud emas!"<< endl;
25 cout << "Dasturdan chiqish..."<< endl;
26 return 0;
27 }
28
29 char ch = input.get();
30 while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom etish
31 {
32 output.put(ch);
33 ch = input.get(); // Keyingi belgini o`qish
34 }
35
36 input.close();
37 output.close();
38
39 cout << "\nNusxalandi!"<< endl;
40
41 return 0;
42 }
Natija:

Manbaa fayl nomini kiriting: c:\example\CopyFile.cpp
Ko`zlangan fayl nomini kiriting: c:\example\temp.txt
Nusxalandi!

Dastur foydalanuvchini mavjud manbaa fayl nomini (11qator) va ko`zlangan fayl nomini (16-qator) kiritishga undaydi. 19-qatorda kirishFaylNomi uchun kiritish ob’yekti – input yaratiladi va 20-qatorda chiqishFaylNomi uchun chiqarish ob’yekti – output hosil qilinadi. Fayl nomlari C-satrlar bo`lishi lozim. kirishFaylNomi.c_str() kirishFaylNomi dan C-satr qaytaradi.


22-27-qatorlar kiritish fayli mavjudligi yoki yo`qligini tekshiradi. 30-34-satrlar get funksiyasidan foydalangan paytda qaytadan belgilarni o`qiydi va put funksiyasidan foydalanib, belgilarni chiquvchi faylga yozadi.
Faraz qilaylik, 29-34-qatorlar quyidagi kod bilan almashtirilgan:
while(!input.eof()) // Agar fayl so`ngi bo`lmasa davom etish
{
output.put(input.get());
}
Nima yuz beradi? Agar dasturimizni ushbu yangi kod bilan ishga tushirsak, yangi fayl originaliga nisbatan bir bayt kattaroq bo`lganini ko`rishimiz mumkin. Ya’ni, yangi fayl o`zining so`ngida qo`shimcha, keraksiz belgiga ega bo`lib qoladi. Buning sababi shundaki, kiruvchi fayldan input.get() dan foydalangan holda, oxirgi belgi o`qilganda, input.eof() false ko`rinishga o`tadi. So`ngra dastur boshqa belgini o`qishga undaydi; input.eof() endi true ga aylanadi. Shunday bo`lsada, ortiqcha keraksiz belgi chiquvchi faylga yuborilib bo`lgan bo`ladi.
8.7-kodli ro`yxatdagi to`g`ri tuzilgan dastur belgini o`qiydi (29-qator) va eof() ni tekshiradi (30-qator). Agar eof() true bo`lsa, belgi output ga yozilmaydi, boshqa hollarda u nusxalanadi (32-qator). Bu jarayon eof() funksiyasi true qiymat qaytarguniga qadar davom etadi.



Download 0.97 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling