Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабараторная работа 7_1.doc
Скачиваний:
3
Добавлен:
01.03.2016
Размер:
93.18 Кб
Скачать

Лабораторная работа n 7 Обработка текстовых и бинарных файлов

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

Понятие файла

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

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

Каким образом организованы данные в файле? Одна из возможностей представления структуры данных состоит в том, чтобы рассматривать их как непрерывный поток символов. Другая возможность представления - рассматривать их как последовательность строк переменной длины. Еще одна возможность состоит в том, чтобы представлять данные организованными в виде форматированных полей, отделенных друг от друга каким-то разделителем (например, пробелом или запятой). Наконец, файл можно рассматривать как последовательность записей фиксированной длины (примером могут служить записи о купле-продаже акций). Для всех этих представлений существуют соответствующие функции файлового ввода-вывода, которые можно разделить на следующие типы (табл. 1).

Таблица 1. Классификация функций файлового ввода-вывода

Тип функции

Представление данных

Доступ к файлу

Организация доступа к файлу с заданным именем

Посимвольный ввод-вывод

Поток символов

Построчный ввод-вывод

Последовательность строк переменной длины

Форматированный ввод-вывод

Форматированные поля с разделителями

Ввод-вывод записей

Последовательность записей постоянной длины

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

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

Доступ к файлу

Чтобы получить доступ к файлу или устройству с помощью функций стандартного ввода-вывода, необходимо поместить в память и инициализировать структуру типа FILE(описана в заголовочном файле stdio.h). Эта процедура называетсяоткрытием файла. Каждый открытый файл связан с соответствующей структурой типа FILE. Для этого используется функцияfopen.

Поскольку одновременно может иметься много открытых файлов, то функция fopen возвращает указатель на структуру FILE, соответствующую открываемому файлу. Этот указатель называется указателем файла; он должен быть сохранен для последующего использования в других функциях файлового ввода-вывода. Программист должен сам определить указатель файла, в который будет помещено значение, возвращаемое функцией fopen, например:

FILE *fp; /* Указатель файла */

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

if ((fp = fopen(file_specification, mode)) == NULL)

{

    /* Обработка ошибки открытия файла */

}

Первый аргумент, file_specification, является указателем на строку (которая нередко является строковой константой), содержащей любое допустимое имя файла операционной системы.

Другой аргумент функции fopen, mode, также является указателем на строку. Эта строка задает режим доступа к файлу. Допускаются три режима, обозначаемые буквамиr, wи a: чтение (read), запись (write), и дополнение (append). В табл. 2 описаны назначения этих режимов.

Таблица 2. Режимы открытия файлов с помощью функции fopen 

Обозначение режима

Режим

файл существует

файла нет

"r"

Открыть файл для чтения, начиная с его первого байта

Ошибка (возвращается значение NULL)

"w"

Открыть файл для записи, уничтожая его прежнее содержимое

Создать новый файл для записи

"a"

Открыть файл для записи, начиная с его последнего байта (сохраняя его прежнее содержимое)

Создать новый файл для записи

Некоторые реализации функции fopen обеспечивают дополнительные режимы модификации файлов. Их назначение показано в табл. 3.

Таблица 3. Режимы, обеспечивающие модификацию файла (чтение и запись)

Обозначение дополнительного режима

Назначение

"r+"

Открыть существующий файл для чтения или записи

"w+"

Создать файл для чтения или записи

"a+"

Открыть файл для чтения или записи, начиная с его конца

К перечисленным в таблицах 2,3 литералам могут быть добавлены следующие:

Таблица 4. Режимы работы с файлом в текстовом и бинарном виде

Обозначение дополнительного режима

Назначение

"t"

Открыть файл в текстовом режиме (по умолчанию)

"b"

Открыть файл в бинарном режиме

При успешном вызове функция fopen возвращает непустой указатель типа FILE. При ошибке открытия файла возвращается пустое значение NULL. Вы должны проверитьзначение, возвращаемое функцией fopen, чтобы убедиться в том, что файл открыт успешно (см. приводимый далее пример).

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

Указатели файлов могут использоваться повторно. Когда доступ к конкретному файлу завершен, программист должен закрытьфайл, как показано в следующем примере:

#include <stdio.h> main()

{      FILE *myfile;      if((myfile = fopen("test.dat","rt")) == NULL)      {           printf("Ошибка при открытии файла\n");           exit;      }      /* Работа с файлом */      . . . .

     /* Завершить работу с файлом */      fclose(myfile);

}

Функция fclose выясняет, все ли буферизованные данные записаны в файл, а затем позволяет повторно использовать указатель файла при последующем вызове функции fopen. Вы всегда должны закрывать файл после завершения операций ввода-вывода, связанных с этим файлом.

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