Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamen_infa.docx
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
636 Кб
Скачать

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

Пользовательские текстовые файлы представляют собой отдельные от программы файлы текстового формата, т.е. они могут быть созданы, прочитаны и отредактированы любым текстовым редактором. Программа, в принципе, тоже является текстовым файлом, её тоже можно открыть и отредактировать текстовым редактором. Текстовый редактор входит и в состав систем разработки приложений, в частности, Borland Developer Studio. Входные и выходные файлы можно создавать и просматривать прямо в ней. Для создания текстового файла выберите пункт меню File – New – Other… – Other Files – Text.

Преимущества текстовых файлов:

 ?@>AB>B0 A>740=8O;

 =03;O4=>ABL 2>7<>65= ?@>A<>B@ A@54AB20<8 B5:AB>2KE @540:B>@>2;

 C=825@A0;L=>ABL <>6=> >1>9B8AL B>;L:> MB8< 284>< D09;>2.

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

Текстовый файл представляет собой совокупность строк (последовательностей символов) переменной длины, заканчивающихся специальным символом eoln – конец строки (на клавиатуре набирается нажатием клавиши «Ввод»). Файл заканчивается специальным символом eof – конец файла, который добавляется редактором автоматически.

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

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

Входные файлы создаются любым подходящим способом вне программы и до её запуска. Выходные файлы формируются программой.

Основные функции для работы с потоком (Ввод/вывод в C)

В языке C существуют стандартные потоки, связанные с файл - устройствами:

 stdin – стандартный консольный ввод (поток с клавиатуры по умолчанию);

 stdout – стандартный консольный вывод (на монитор по умолчанию).

Нестандартные (файловые) потоки связаны с физическими файлами.

Объявление файлового потока – это объявление переменной-указателя на структуру типа FILE, в которой будут храниться атрибуты файла:

FILE *f; где *f указатель на файл.

Для работы с файлами в программах на C используется заголовочный файл stdio.h, в котором объявлен специальный тип данных – структура FILE, предназначенная для хранения атрибутов (параметров) файлов (указатель текущей позиции файла, признак конца файла, флаги индикации ошибок, сведения о буферизации и др.).

Открытие потока. Работа с потоком начинается с его открытия. Поток можно открыть для чтения и/или записи в двоичном или текстовом режиме. Функция открытия потока имеет формат:

FILE* fopen(const char* filename, const char* mode);

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

Режим открытия может также содержать символы t (текстовый режим) или b (двоичный режим). По умолчанию файл открывается в текстовом режиме, при котором комбинация символов «возврат каретки» и «перевод строки» (0x13 0x10) при вводе преобразуются в одиночный символ перевода строки (при выводе выполняется обратное преобразование). В двоичном режиме эти преобразования не выполняются.

Пример

FILE *f = fopen(“d:\project1\data”, “rb”);

Поток связан с физическим файлом data из папки project1 на диске d. В данном случае бинарный файл открыт для чтения.

Особенности режимов открытия файлов. Если файл открывается в режиме записи данных “w”, то указатель текущей позиции устанавливается на начало файла. Если указанный в функции fopen файл не существует, то он создается. Необходимо помнить, что открытие существующего файла в режиме “w” приводит к уничтожению его старого содержания.

Открытие файла для чтения в режиме “r” возможно только для созданного ранее файла, при этом указатель текущей позиции устанавливается на начало файла. Если открываемый на чтение файл не существует, функция fopen  возвращает пустой указатель со значением NULL.

Если файл открывается в режиме добавления данных “a”, то указатель текущей позиции устанавливается на конец файла. Данные, ранее помещенные в файл, остаются без изменений. Если указывается несуществующий файл, то он создается заново.

Для поочередного выполнения чтения и записи в режиме “+” необходимо ручное позиционирование курсора.

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

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

и возможна потеря данных. С помощью функций setbuf и setvbuf можно управлять размерами и наличием буферов.

Закрытие потока. После завершения обработки файла его следует закрыть с помощью функции  fclose. Функция закрытия потока имеет формат:

int fclose(FILE* f);

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

Проверка признака конца файла. Так как при каждой операции ввода-вывода происходит перемещение указателя текущей позиции в файле, в какой-то момент указатель достигает конца файла. Структура типа FILE имеет поле – индикатор конца файла. Функция проверки признака конца файла имеет формат:

int feof(FILE* f);

Функция feof() проверяет состояние индикатора конца файла и возвращает значение 0, если конец файла не был достигнут, или значение, отличное от нуля, если был достигнут конец файла. Cтатус функции обновляется перед операцией чтения. Функция имеет единственный аргумент – указатель на поток типа FILE. Вызов функции:

while(!feof(f))… проверяет, что конец файла еще не достигнут.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]