Печатать книгуПечатать книгу

§ 10. Текстовые файлы

Сайт: Профильное обучение
Курс: Информатика. 10 класс (Повышенный уровень)
Книга: § 10. Текстовые файлы
Напечатано:: Гость
Дата: Вторник, 7 Май 2024, 00:54

10.1. Команды для работы с текстовыми файлами

В настоящее время компьютеры обрабатывают огромные массивы больших данных, ввод таких данных с клавиатуры потребовал бы намного больше времени, чем их обработка. Поэтому в современных языках программирования предусмотрена возможность читать данные из файла и записывать результаты в файл. Один из самых простых форматов файлов — это текстовые файлы, которые хранят только символы из кодовой таблицы. Создавать и просматривать такие файлы можно с помощью программы Блокнот.

При работе с текстовыми файлами изменяется только формат ввода и вывода данных. Алгоритмическая составляющая процесса решения задачи не изменяется. Обычно с помощью программы Блокнот создается файл, содержащий входные данные — те, которые пользователь мог ввести с клавиатуры. По завершении работы программа выводит результат не в консоль, а в файл, который можно открыть в Блокноте. Сохраняются файлы в папке проекта (пример 10.1).

Чтобы программа могла работать с файлами, необходимо указать имена этих файлов и определить, для какой цели нужен файл — для ввода или для вывода.

Для работы с файлами используются специальные типы данных, называемые потоками. Поток ifstream служит для работы с файлами в режиме чтения (ввод данных). Поток ofstream служит для работы с файлами в режиме записи (вывод данных). В программах на C++ при работе с текстовыми файлами необходимо подключать библиотеку fstream (пример 10.2).

Пример 10.1. Файлы input.txt (для ввода данных) и output.txt (для вывода) в папке проекта.

Пример 10.2. Команды для работы с файлами:

#include <fstream>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  ofstream fout("output.txt");

  …

  return 0;

}    

Команда ifstream fin("input.txt") связывает файловый поток с именем fin и текстовый файл input.txt, предназначенный для чтения данных из него. В программе имя файлового потока fin будет использоваться тогда, когда нужно ввести данные (по существу fin будет использоваться вместо cin).

Команда ofstream fout("output.txt") связывает файловый поток с именем fout и текстовый файл output.txt, предназначенный для записи данных в него. В программе имя файлового потока fout будет использоваться тогда, когда нужно вывести данные (по существу, fout будет использоваться вместо cout).

Имя файлового потока является идентификатором, пользователь может выбрать его произвольно.

Если необходимо работать с несколькими файлами одновременно, то каждый файл связывают со своим потоком для чтения или записи данных.

Если возникает необходимость сначала записать что-либо в файл, а затем прочитать из него, то нужно сначала закрыть поток для чтения и только потом связывать файл с потоком для записи. Для закрытия используется команда fin.close();

10.2. Чтение и запись числовых данных

Пример 10.3. Написать программу, которая считывает из текстового файла числа и возводит в квадрат положительные числа и заменяет отрицательные числа их модулем. Результат работы программы записывается в текстовый файл. Структура входного файла: в первой строке записано число, которое обозначает количество чисел в файле; во второй строке — сами числа, разделенные пробелом.

Этапы выполнения задания

I. Исходные данные: переменная n (количество), переменная x (текущее число) .

II. Результат: преобразованные числа.

 III. Алгоритм решения задачи.

1. Ввод из файла количества чисел.
2. В цикле for:

2.1. Читаем число из файла. 
2.2. Проверяем и преобразуем число.
2.3. Записываем число в файл.

IV. Описание переменных: n, x, r – int.

При создании текстовых файлов следует помнить, что расширение .txt программа Блокнот приписывает по умолчанию. Если дописать расширение вручную, то получим файл с именем input.txt.txt. Программа не найдет файл для чтения данных, соответственно, файл с результатами работы будет пустым.

Пример 10.3.

V. Программа:

#include <fstream>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  ofstream fout("output.txt");

  int n;

  fin >> n;

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

    int x, r;

    fin >> x;

    if (> 0)

      r = x * x;

    else

      r = -x;

    fout << r << " ";

  }

  return 0;

}

VI. Тестирование.

1. Создать текстовый файл input.txt в папке проекта.


2. Запустить программу. При запуске программы в консольном окне выводится только время работы программы.
3. Открыть созданный программой файл output.txt.

10.3. Чтение и запись строковых данных

Пример 10.4. Написать программу, которая считывает из текстового файла строки и выводит в другой текстовый файл те из них, которые не содержат ни одного пробела. Структура входного файла: в первой строке записано число n, которое обозначает количество строк в файле, дальше записано n строк.

Этапы выполнения задания

I. Исходные данные: переменная n (количество), переменная st (текущая строка).

II. Результат: выбранные строки.

III. Алгоритм решения задачи.

1. Ввод из файла количества строк. Поскольку после числа в файле стоит символ перевода строки, то необходимо очистить буфер данных.
2. 
В цикле for:

2.1. Читаем строку из файла. 
2.2. Проверяем, есть ли в ней пробелы. Если да, то записываем строку в файл.

Описание переменных: n – int, st – string.

Пример 10.4.

V. Программа:

#include <fstream>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  ofstream fout("output.txt");

  int n;

  fin >> n;

  fin.ignore();

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

    string st;

    getline(fin, st);

    if (st.find(' ') == -1)

     fout << st << endl;

  }

  return 0;

}

 VI. Тестирование.

1. Файл input.txt.

2. Файл output.txt

10.4. Совместное использование файлов и консоли

Пример 10.5. Написать программу, которая считывает из текстового файла числа и находит среди них максимальное по значению. Результат работы программы выводится на консоль. Структура входного файла. В первой строке записано число, которое обозначает количество чисел в файле. Во второй строке сами числа, разделенные пробелом.

Этапы выполнения задания

I. Исходные данные: переменная n (количество), переменная x (текущее число) .

II. Результат: преобразованные числа.

III. Алгоритм решения задачи.

1. Переменную для хранения максимального значения инициализируем минимально возможным значением типа
int - INT_MIN.
2. 
Ввод из файла количества чисел.
3. 
В цикле for:

3.1. Читаем число из файла. 
3.2. Проверяем считанное число. Если оно больше текущего максимального значения, то изменяем текущее максимальное значение.

4. Вывод результата.

IV. Описание переменных: n, x, Max – int.

Пример 10.5.

V. Программа:

#include <iostream>

#include <fstream>

 

using namespace std;

 

int main()

{

  ifstream fin("input.txt");

  ofstream fout("output.txt");

  int n;

  fin >> n;

  int Max = INT_MIN;

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

    int x;

    fin >> x;

    if (> Max)

      Max = x;

  }

  cout << "Max= " << Max << endl;

  return 0;

}

 VI. Тестирование.

1. Файл input.txt.

2. Результат.

Вопросы к параграфу

1. С какой целью используют текстовые файлы в программировании?

2. Какая команда создает поток для чтения из файла? Для записи в файл?

3. Какую библиотеку нужно подключить для работы с файлами?

Упражнения

    

1. Напишите программу, которая считывает из текстового файла числа и записывает в другой текстовый файл те из них, которые являются полными квадратами. Структура входного файла: в первой строке записано число, которое обозначает количество чисел в файле; во второй строке — сами числа, разделенные пробелом.

2. Написать программу, которая считывает из текстового файла строки и выводит в другой текстовый файл те из них, в которых есть слова, начинающиеся на введенную с клавиатуры букву. Структура входного файла: в первой строке записано число n, которое обозначает количество строк в файле. Дальше записано n строк.

3. В файле записан текст. Написать программу, которая найдет в нем слово максимальной длины. Слово вывести на консоль. Структура входного файла: в первой строке записано число n, которое обозначает количество строк в файле. Дальше записано n строк.