Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмизация и программирование.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
5.59 Mб
Скачать

7.2. Открытие текстового файла для записи

Для открытия и записи в файл используются переменная fstream <имя_переменной>; оператор <переменная_потока>.open(путь_к_файлу, режим);

Для закрытия файла используется оператор <переменная_потока>.close();

Пример: открытие файла1 для записи в колонку пяти вещественных чисел.

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

int i, n=5; float a;

fstream file1; //объявляет имя потока для записи/чтения данных в файл

file1.open("C:\\SOURCE\\qwerty.dot", ios::out); //cоздается файл

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file1<<a<<endl; //запись переменной а в файл

}

file1.close(); //закрытие потока

return 0;

}

Если файл с таким именем уже существует, то он будет перезаписан, если файл не существует, то он создается заново. Следует следить за соответствием типа вводимой переменной. При любой попытке ввода литеры (char) вместо float файл заполняется n нулями и закрывается.

Пример: открытие файла1 для записи в строку пяти вещественных (целых) чисел.

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

int i, n=5; float a;

fstream file1; //объявляет имя потока для записи/чтения данных в файл

file1.open("C:\\SOURCE\\qwerty.dot", ios::out); //cоздается файл

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file1<<a<<" "; //запись переменной а в файл

}

file1.close(); //закрытие потока

return 0;

}

Пример: открытие файла2 для записи 3-х строк (пробел – начало следующей строки).

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text; }

int main()

{

int i, n=3; string a;

ofstream file2; //объявляет имя потока для записи строки в файл

file2.open("C:\\SOURCE\\qwerty.dot", ios::out);

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

cin>>a;

file2<<a<<endl; //запись строки а в файл

}

file2.close(); //закрытие потока

return 0;

}

Использование указанного файла во многих случаях не совсем удобно, т.к. символы перехода на новую строку, табуляции, пробел в операторе cin интерпретируются компилятором как нуль-символ (конец строки). Например, при вводе строки без пробела

Иванов-36лет

Петров-17лет

Сидоров-50лет

в файл все запишется корректно, как есть.

Но, при вводе

Иванов – 36 лет

Петров – 17 лет

Сидоров – 50 лет

в файл все запишется

Иванов

36

Поэтому более корректно использовать строчные переменные, содержащие как сами данные, так и их наименование. Для выхода из цикла можно использовать любую заданную строку (например, eof), но ни в коем случае не пытаться внести вручную символ операционной системы “конец файла”, который компилятор создает автоматически при закрытии файла. Попытка эмуляции символа “конец файла” (например, Ctrl^Z ) обычно приводит к зависанию программы.

Пример: открытие файла3 для записи произвольного числа строк (с пробелами).

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}

int main()

{

string str; // объявляется длина строки

fstream file3; //объявляется имя потока для записи данных в файл

file3.open("C:\\SOURCE\\qwerty.dot", ios::out);

cout<<Rus("Введите данные: ")<<endl;

while (str!="eof")

{

getline(cin,str);

file3<<str<<endl; //запись пока не введена строка eof

}

file3.close(); //закрытие потока

return 0;

}

В полученном файле имеем

Иванов – 36 лет

Петров – 17 лет

Сидоров – 50 лет

eof

Для избавления от внесенной строки eof следует в редакторе Notepad уничтожить эту строку.

Запись в файл символьного массива фиксированной длины и фиксированного числа строк может осуществляться следующим образом.

Пример: открытие файла4 для записи символьного масива длиной 80 литер в 3 строки.

y1=3 – первая цифра зачетки

y2=7 – вторая цифра зачетки

#include <iostream> //библиотека ввода/вывода

#include <windows.h> //установка команд операционной системы

#include <cstdio> //для функции gets()

#include <fstream> //потоки ввода/вывода в файлы;

using namespace std;

string Rus(string text) //установка вывода русского языка в строке

{

CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str());

return text;

}

int main()

{

int i,n=3; //объявляется число строк для отображения на экране

char str[80]; //объявляется длина символьного массива

fstream file4; //объявляется имя потока для записи данных в файл

file4.open("C:\\SOURCE\\qwerty.txt", ios::out);

cout<<Rus("Введите данные: ")<<endl;

for (i=0; i<n; i++)

{

gets(str); //считывание одной строки с консоли

file4<<str<<endl; //запись строки в файл

}

file4.close(); //закрытие потока

return 0;

}

При использовании этого способа нужно четко следить за количеством строк и размером символьного массива.

Созданный файл С:\\SOURCE\\qwerty.txt можно прочитать любым текстовым редактором с установкой кодировки CP866. При использовании MS Word следует: Open with/Microsoft OfficeWord/MS-DOS, а при использовании Notepad – Open with/Notepad (Format/Font/Terminal).