Основные методы обработки текстовых файлов

Лабораторная работа №7 (Работа с файлами)

Цель работы: 1) получить практические навыки программирования задач ввода-вывода с использованием файлов.

Теоретические сведения

Организация ввода и вывода. Файловая система

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

С потоком связано понятие внутреннего указателя, который определяет позицию, с которой начинается следующая операция чтения или записи. При каждой операции чтения или записи происходит автоматическое перемещение указателя.

В языке Си (С++)формат стандартных файлов ввода/вывода описан в заголовочном файле stdio.h. Имена стандартных файлов ввода/вывода для языка Си (С++) представлены в табл. 7.1. В момент начала выполнения программы на языке Си (С++) автоматически открываются три потока:

stdin, stdout, stderr.

Таблица 7.1

Потоки, определяемые в языке Си и С++

Имя стандартного файла Описание
stdaux Последовательный ввод/вывод
stderr Выходной поток ошибок
stdin Стандартный ввод
stdout Стандартный вывод
stdprn Вывод на принтер

С++ поддерживает всю систему ввода/вывода Си и добавляет к ней дополнительные возможности, связанные в основном с вводом/выводом объектов. Описание средств для создания потоков в С++ представлено в заголовочном файле iostream.h. Когда начинает работать программа на С++, открываются потоки, приведенные в табл. 7.2.

Таблица 7.2

Потоки, определяемые в языке С++

Имя стандартного файла Описание
cin Стандартный ввод — клавиатура
cout Стандартный вывод — экран
cerr Стандартная ошибка — экран
clog Буферизованная версия cerr — экран

Файловая система языков Си и С++ состоит как бы из двух уровней:

  • логических файлов ;
  • физических файлов, с которыми логические файлы всегда связаны.

Логический файл описывается как указатель на открываемый поток FILE * и служит средством взаимодействия с физическим файлом.

Имя физического файла появляется в программе всего один раз, в тот момент, когда происходит открытие файла, осуществляемое функцией fopen() и одновременно его связывание с логическим файлом.

Основными действиями, производимыми над файлами, являются :

  • открытие файла ,
  • обработка файла
  • закрытие файла.

Обработка файлов может заключаться в следующем :

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

При этом необходимо помнить, что понятие файла в памяти ЭВМ не определено, и приобретает смысл только после его связи с внешним физическим файлом.

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

Тип FILE определяется в заголовочном файле stdio.h и обычно представляет собой структуру, содержащую параметры реализации потока, такие как адреса буферов, указатели позиций потока, маркеры ошибок потока и т.д.

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

  • к текстовому или
  • двоичному,

а также способ доступа:

  • чтение или
  • запись.

Все это выполняется функцией fopen(), имеющей синтаксис:

fopen(имя_файла, режим_доступа)

Режимы доступа к файлам для функции fopen() приведены в табл. 7.3.

Таблица 7.3

Режимы доступа к файлам

Режим Описание
r Открыть файл только для чтения, модификации файла запрещены.
w Создать новый файл только для записи. При попытке открыть таким способом существующий файл происходит перезапись файла. Чтение данных из файла запрещено.
a Открыть файл для дозаписи. Если файла с указанным именем не существует, он будет создан.
r+ Открыть существующий файл для чтения и записи.
w+ Создать новый файл для чтения и записи.
а+ Открыть существующий файл для дозаписи и чтения.

Пример : Открыть текстовый файл для чтения

FILE *ft; // объявили указатель на файловый поток

ft = fopen(inp_f.txt,r); // открыли файл inp_f.txt

При попытке открыть существующий файл можно допустить ошибку в его имени или в указании пути к нужному файлу. Это вызывает ошибку исполнения программы. Следует предвидеть подобные ситуации и проводить проверку возможности открытия файла. Такую проверку осуществить довольно легко, так как функция fopen() возвращает значение указателя в случае успешного его открытия и значение NULL, если доступ к файлу невозможен. Поэтому для проверки достаточно написать:

if (ft = fopen(inp_f.txt,r) != NULL)

{ // обработка файла

}

Текстовой файл состоит из последовательности символов, разбитой на строки путем использования управляющего символа \n. На диске текстовые файлы хранятся в виде сплошной последовательности символов, и их деление на строки становится заметным лишь в момент вывода на экран или печать, так как именно при выводе управляющие символы начинают выполнять свои функции. Текстовые файлы легко переносятся с одного типа компьютера на другой лишь в случаях, когда они содержат только символы, принадлежащие стандартному набору символов.

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

Основные методы обработки текстовых файлов

Файловые функции ввода/вывода fprintf() и fscanf() работают аналогично функциям printf() и scanf(), но имеют дополнительный аргумент, являющийся указателем на файловый поток.

Пример 7.1.Чтение одного элемента из файла, обработка и запись результата в текстовый файл.

#include

#include

#include

Void main()

{ FILE *f;

int dig;

if (f = (fopen(inp_f,r)) == NULL) // открыть файл для чтения

{ printf(Невозможно открыть файл!\n);

exit(0);

}

fscanf(f, %d, dig); // считать значение dig из файла

-85- VBA Excel. Чтение и запись текстовых файлов.


Похожие статьи.

Понравилась статья? Поделиться с друзьями: