C++ за 21 день седьмое издание



Download 1,38 Mb.
bet413/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   409   410   411   412   413   414   415   416   ...   437
Bog'liq
word1

#include




  1. #include




  1. #include




  1. using namespace std;








  1. int main()

6 : {

600 ЗАНЯТИЕ 27. Применение потоков для ввода и вывода



  1. ifstream myFile;




  1. myFile.open("HelloFile.txt", ios_base::in);





  1. if (myFile.is_open())





  1. cout « "File open successful. It contains: " « endl;




  1. string fileContents;



14



  1. while (myFile.good())








  1. getline (myFile, fileContents);




  1. cout « fileContents « endl;





20
21 cout « "Finished reading file, will close now" « endl;



  1. myFile.close();





24

else

"open() failed: check if file is in right folder"

25

cout «

26

«

endl;

return 0;




27




28:

}






Результат


File open successful. It contains:


My first text file!


Hello file!


Finished reading file, will close now

Чтобы код листинга 27.9 прочитал текстовый файл HelloFile.txt, создан­ ный в листинге 27.8, его следует либо переместить в рабочий каталог этого проекта, либо объединить этот код с предыдущим.




Анализ

Как обычно, вызов метода i s o p e n () в строке 8 проверяет успех вызова метода op en (). Обратите внимание на применение оператора извлечения » при чтении содер­ жимого файла непосредственно в строку, которая затем отображается при помощи объ­ екта c o u t в строке 18. В этом примере функция g e t l i n e () используется для чтения из файлового потока тем же способом, что и в листинге 27.7 при чтении ввода пользователя, по одной строке за раз.


Запись и чтение из двоичного файла

Фактически процесс записи в двоичный файл не слишком отличается от процесса, ко­ торый вам уже известен на настоящий момент. При открытии файла следует использовать флаг io s b a s e : : b in a r y как маску. Обычно используются методы o f s tr e a m : : w r i t e () и i f s t r e a m : : r e a d (), как показано в листинге 27.10.



Использование объекта std::fstream для работы с файлом

601

ЛИСТИНГ 27.10. Запись структуры в двоичный файл и ее восстановление из того же файла





  1. #include




  1. #include

2 : #include



  1. #include




  1. using namespace std;

5: /



  1. struct Human




  1. {

8 : Human () {};



  1. Human(const char* inName, int inAge, \ const char* inDOB) : Age(inAge)

    1 0 :

    {

    inName);

    1 1 :

    strcpy(Name,

    1 2:

    strcpy(DOB,

    inDOB);

  2. }








  1. char N^me[30];




  1. int Age;




  1. char DOB[20];




  1. };



19:



  1. int main()



21: {
2 2 : Human Input("Siddhartha Rao", 101, "May 1910");


23:



  1. ofstream fsOut ("MyBinary.bin", \



ios_base::out I ios_base::binary);


25:



  1. if (fsOut.is_open())







28: cout « "Writing one object of Human to a binary file"



    1. endl;




  1. fsOut.write(reinterpret_cast(&Input), \ sizeof(Input));

  2. fsOut.close();




  1. }



32:



  1. ifstream fsln ("MyBinary.bin", ios_base::in | ios_base::binary);








  1. if(fsln.is_open())




  1. {




  1. Human somePerson;




  1. fsln.read((char*)&somePerson, sizeof(somePerson));



39:



  1. cout « "Reading information from binary file: " « endl;




  1. cout « "Name = " « somePerson.Name « endl;




  1. cout « "Age = " « somePerson.Age « endl;




  1. cout « "Date of Birth = " « somePerson.DOB « endl;




  1. }



45:



  1. return 0;




  1. }

602 ЗАНЯТИЕ 27. Применение потоков для ввода и вывода




Результат


Writing one object of Human to a binary file


Reading information from binary file:


Name = Siddhartha Rao


Age = 101


Date of Birth = May 1910


Анализ



  1. строках 22-31 создается экземпляр структуры Human, содержащей атрибуты Name, Age и DOB. Она сохраняется на диске в двоичном файле M y B in a ry .b in с использованием объекта класса o f s tr e a m . Затем, в строках 33 -44, эта информация читается с исполь­ зованием другого потокового объекта класса i f s tre a m . Информация для вывода таких атрибутов, как Name и других, читается из двоичного файла. Этот пример демонстрирует также применение объектов i f s tr e a m и o f s tr e a m для чтения и записи файлов с исполь­

зованием методов i f s t r e a m : :r e a d ( ) и o f s tr e a m : : w r i t e () соответственно. Обратите


внимание на применение оператора r e i n t e r p r e t c a s t в строке 29, фактически он вы ­


нуждает компилятор интерпретировать структуру как c h a r* . В строке 38 применяется приведение в стиле С.





ПРИМЕЧАНИЕ

Если бы не цели демонстрации, я записал бы структуру Human со всеми ее







атрибутами в файл XML. Формат XML обеспечивает гибкость и масштабируе­




мость при хранении информации.




Если после сохранения такой структуры, как Human, в данной версии придется




добавить в нее новые атрибуты (например, NumChildren), то вам придется




позаботиться о функциональных возможностях метода ifstream::read О,




чтобы правильно читать двоичные данные прежних версий.

Использование объекта s td :: stringstream для преобразования строк

Предположим, есть строка, содержащая строковое значение "4 5 ". Как преобразовать это строковое значение в целое число со значением 45? И наоборот? Одной из весьма по­ лезных утилит, предоставляемых языком C++, является класс s t r i n g s t r e a m , обеспечи­ вающий выполнение множества преобразований.





СОВЕТ

Чтобы использовать класс std::stringstream, включите его заголовок:







#include



Некоторые из основных

операций класса s t r i n g s t r e a m дем онстрирует ли ­

стинг 27.11.







Использование объекта std::stringstream для преобразования строк

603



ЛИСТИНГ 27.11. Преобразование целочисленного значения в строковое,



  1. наоборот, с использованием класса std: :stringstream_____________________




    1. #include




    1. #include




    1. #include




    1. using namespace std;



4:



  1. int main()



6 : {

  1. cout « "Enter an integer: ";




  1. int Input = 0;




  1. cin » Input;

1 0 :

  1. stringstream converterStream;




  1. converterStream « Input;




  1. string strlnput;




  1. converterStream » strlnput;








  1. cout « "Integer Input = " « Input « endl;



17: cout « "String gained from integer, strlnput = " « strlnput



  1. endl;



18:



  1. stringstream anotherStream;




  1. anotherStream « strlnput;




  1. int Copy = 0;




  1. anotherStream » Copy;



23:



  1. cout « "Integer gained from string, Copy = " « Copy « endl;








  1. return 0;




  1. }

Результат


Enter an integer: 45


Integer Input = 45


String gained from integer, strlnput = 45


Integer gained from string, Copy = 45


Анализ

Пользователя просят ввести целочисленное значение. Сначала это целое число встав­ ляется в объект класса s t r i n g s t r e a m (строка 12) при помощи оператора « . Затем, в строке 14, оператор извлечения » используется для преобразования этого целого числа в строку. Потом эта строка используется как отправная точка для получения целочисленного значения переменной Сору, представляющего числовое значение строки в переменной s t r l n p u t .



  1. ЗАНЯТИЕ 27. Применение потоков для ввода и вывода




РЕКОМЕНДУЕТСЯ

Используйте класс ifstream тогда, когда на­ мереваетесь только читать из файла


Используйте класс of stream тогда, когда на­ мереваетесь только писать в файл


Помните о проверке успешности открытия фай­ лового потока при помощи метода is_open (}. Используйте ее прежде, чем вставить или из­ влечь данные из файлового потока



Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   409   410   411   412   413   414   415   416   ...   437




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish