Kompyuter injinering ” fakulteti 103-guruh talabasi eshnazarov Rustam ning dasturlash fanidan mustaqil ishi №8
Download 0.97 Mb.
|
2 5327958925562086610
- Bu sahifa navigatsiya:
- include
- "Ko`zlangan fayl nomini kiriting: " ; 15 string
- "\nNusxalandi!"
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:
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling