Конспект-справочник 'Моделирование на C++'


Ввод-вывод, чтение/запись файлов



Download 1,26 Mb.
Pdf ko'rish
bet29/62
Sana20.03.2022
Hajmi1,26 Mb.
#504043
1   ...   25   26   27   28   29   30   31   32   ...   62
Ввод-вывод, чтение/запись файлов 
Язык С++ средствами стандартной библиотеки предоставляет 
возможности для чтения и записи файлов. Интерфейс библиотеки не зависит от 
выбора целевой платформы и операционных систем, на которых будет работать 
программа. 
Весь ввод и вывод в языке происходит через входные/выходные потоки - 
файлы, буферы памяти, консоль в которые операторм '<<' записываются и 
оператором '>>' считываются последовательности данных. Запись в файл с 
точки зрения ее описания в программе не отличается от записи в консоль. 
#include 
> // классы для работы с файлами 
ofstream file( "output-file.txt" );
file << "output string"; 
 
#include 
> // классы и определения 'cin', 'cout' для
// 
консольного ввода/вывода 
cout << "output string"; 
Для работы с файлами используется заголовочный файл . В нем 
определены типы 'ofstream' - файл для записи, 'ifstream' - файл для чтения, 
'fstream' - 
файл как для чтения, так и для записи. Для начала работы необходимо 
создать объект одного из этих типов и открыть его для чтения. #### Чтение 
текстового файла Открытие текстового файла можно сделать в момент 
конструирования объекта, указав путь к файлу 
#include  
ifstream file( "input-file.txt
" ); // открытие файла при создании объекта 
// или 
ifstream file
; // объект создан, но покак не ассоциирован с каким либо файлом 
file.open( "input-file.txt
" ); // явное открытие файла вызовом метода 
... 
file.close
(); // при явном открытии нелишним будет так же явно файл 
закрыть. 
43 


// 
Впрочем, если это не сделано деструктор объекта закроет
// 
открытый файл. 
При открытии файла можно указать режим, в котором он будет открыт. 
Режим задается следующими значениями перечисления: 

fstream::in (input
) файл для чтения. Для ifstream он включен по 
умолчанию 

fstream::out (output) файл для записи. Для ofstream он включен по 
умолчанию 

fstream::binary (binary
) бинарный файл (данные в файле не 
интерпретируются как символы, в частности 0x0D 0x0A не означат перевод 
строки). По умолчанию включен текстовый режим. 

fstream::ate (at end
) текущая позиция записи установлена в конец файла. 
запись осуществляется в нее, но позицию можно поменять 

fstream::app (append
) запись осуществляется только в конец файла 
независимо от текущей позиции записи 

fstream::trunc (truncate
) очистка содержимого файла при открытии. 
#include  
// открытие бинарного файла для чтения 
fstream file( "input-file.txt", fstream::binary | fstream::in);
После открытия файла можно проводить операцию чтения его 
содержимого аналонично тому, как это происходит при чтении клавиатурного 
ввода. Код для чтения тектсового файла со значениями смешанного типа - 
целые, вещественные, строки: 
1.0 2.0 3.0 11 "str1" 
1.1 2.1 3.1 22 str2 
1.2 2.2 3.2 33 "str3" 
...может выглядеть следующим образом: 
#include  
#include 
// в коде используется тип 'string' 
#include 
> // требуется для форматирования отладочного вывода 
 
 
ifstream file("dat/example-005-in.txt
"); // файл лежит в подкаталоге 'dat/' 
 
// структура данных, соответствующая записи в файле 
struct Record 

double p,q,r; 
int i; 
string s; 
} rec; 
 
// проверка успешного открытия файла 
if(file) 
44 




// чтение файла до конца записей 
while( file >> rec.p >> rec.q >> rec.r >> rec.i >> rec.s ) 


// отладочный вывод считанных значений на консоль 
cout << setprecision(2) << fixed; 
cout << "p=" << rec.p; 
cout << " q=" << rec.q; 
cout << " r=" << rec.r; 
cout << " i=" << rec.i; 
cout << " s=" << rec.s << endl; 


Внимание: строки в файле должны соответствовать предполагаемому 
формату записей. В данном случае: три вещественных числа, одно целое и 
строка. 
Чтение текстового файла может осуществляться функцией 'getline()' построчно 
с последующим разбором строки на отдельные элементы. Образец файла: 
1.0 01/09/2014 11 "str1" 
1.1 02/09/2014 22 "str2" 
1.2 03/09/2014 33 "str3" 
struct Record 

float p; 
int day,month,year; 
int i; 
char c[256]; // sscanf
, импользуемый в этом примере не
// 
поддерживает тип 'string' 
} rec; 
string str; 
while( getline(file,str) ) 

cout << "line content " << str << endl; 
 

// Существуют разные способы. Например с вызовом 'sscanf()' 
sscanf(str.c_str(), "%g %2d/%2d/%4d %d %s", 
&rec.p,&rec.day,&rec.month,&rec.year,&rec.i, rec.c); 
cout << "parsed=" << rec.p<< " "<
" "<

В контесте разбора строки на элементы стоит обратить внимание на 
регулярные выражения, также входящие в состав стандартной библиотеки, 
правда на момент написания этого документа не везде и не полностью еще 
45 


реализованные. Регулярные выражения выходят за рамки этого документа. 
Информацию без труда вы сможете найти в Интернет. 
Для различных преобразований существуют группы функций, 
определенных в: std::to_string - конвертирование числовых типов в строки 
(string str = to_string(3.14);) std::stoi, std::stol, std::stoll - 
конвертирование строки 
в целое соотвествующей имени функции длины (int i = stoi("3");) std::stof, 
std::stod, std::stold - 
конвертирование строки в вещественное число 
соотвествующей имени функции длины (double d = stod("3.14");) 

Download 1,26 Mb.

Do'stlaringiz bilan baham:
1   ...   25   26   27   28   29   30   31   32   ...   62




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