- •140604 – Электропривод и автоматика промышленных установок и технологических комплексов
- •220301 – Автоматизация технологических процессов и производств
- •Содержание.
- •Введение
- •Домашняя работа № 1. Решение задач с обработкой строк
- •1. Цель работы
- •Подготовка к работе
- •Теоретическая часть:
- •Будьте осторожны при явной инициализации строки. Так, оператор
- •4. Задание.
- •5. Требования к отчету по домашней работе:
- •6. Варианты заданий.
- •Домашняя работа № 2. Решение задач с использованием файлов.
- •3.2 Форматированный режим обработки файлов Основные алгоритмы работы с файлами
- •1) Создание указателя на предопределенный тип file.
- •2) Открытие
- •Закрытие файла.
- •3.2.2 Особенности работы с текстовыми файлами:
- •3.2.3 Особенности работы с двоичными файлами.
- •Int fseek ( указатель_потока, число_перемещаемых_байтов, указатель);
- •3.3. Потоковая обработка файлов.
- •Основные алгоритмы работы с файлами
- •Порядок работы с потоками
- •1) Описание потоковой переменной
- •2) Открытие файла
- •Обработка
- •4) Закрыттие файла
- •3.4. Задачи редактирования файла
- •4. Задание.
- •5. Требования к отчету по лабораторной работе:
- •6. Варианты заданий:
- •7. Контрольные вопросы.
- •Список рекомендуемой литературы.
- •Из ресурсов электронно-библиотечной системы iQlib
- •Из электронных ресурсов ScienceDirect
Домашняя работа № 2. Решение задач с использованием файлов.
Цель работы:
Изучить особенности работы с текстовыми и бинарными файлами.
2. Подготовка к работе.
Изучить основные методы обработки текстовых файлов. Необходимо знать, как осуществляется последовательный и произвольный (прямой) доступ к элементам двоичных файлов [лекция 14, 16] и последовательный доступ к элементам текстовых файлов, порядок работы с файлами, основные команды и функции, используемые при обработке файлов.
3. Теоретическая часть.
3.1 Файлы. Типы файлов.
Файл – это именованная область внешней памяти, в которой хранится логически завершенный объем данных. Под файлом также понимают поименованную совокупность данных на внешнем носителе (последовательность или множество однотипных записей).
Файл имеет следующие характерные особенности:
имеет имя на диске, что дает возможность программам идентифицировать и работать с несколькими файлами;
длина файла ограничивается только емкостью диска.
Часто бывает необходимо ввести некоторые данные из файла или вывести результаты в файл. Например, бывает необходимо обрабатывать массивы, которые слишком велики, чтобы полностью разместиться в памяти.
Файловая система языков С и С++ состоит как бы из двух уровней:
логических
физических (с которыми логические всегда связаны) файлов.
Логический файл описывается как указатель на открываемый поток FILE* и служит средством взаимодействия с логическим файлом. Имя физического файла появляется в программе только один раз, в тот момент, когда происходит открытие файла, осуществляемое функцией fopen(), и одновременно его связывание с логическим файлом.
Понятие файла в памяти ЭВМ не определено, и приобретает смысл только после его связи с внешним физическим файлом.
Различают следующие типы файлов:
- текстовые;
- двоичные.
Текстовый файл – это файл, в котором каждый символ из используемого набора символов хранится в виде одного байта (кода, соответствующего символу). Текстовые файлы разбиваются на несколько строк с помощью специального символа "конец строки". Текстовый файл заканчивается специальным символом "конец файла".
Двоичный файл – файл, данные которого представлены в бинарном виде. При записи в двоичный файл символы и числа записываются в виде последовательности байт (в своем внутреннем двоичном представлении в памяти компьютера).
Особенностью языка С++ является отсутствие в нем структурированных файлов. Все файлы рассматриваются как неструктурированная последовательность байтов. При таком подходе понятие файла распространяется и на различные устройства.
Тип задается:
с помощью системной переменной _fmode (stdlib.h):
_fmode=O_BINARI (для двоичных, задавать
обязательно)
_fmode=O_TEXT (для текстовых, по умолчанию)
при открытии файла с помощью задания режима доступа (b - для двоичных, t – для текстовых). Если не задан, то считается, что файл текстовый.
В С++ операции с файлами можно осуществлять в двух режимах: форматированном и потоковом.
Исходя из этого библиотечные функции для работы с файлами делятся на потоковые и префиксные. Их существенное отличие состоит в том, что потоковые функции выполняют дополнительную буферизацию (на уровне библиотечной функции и на уровне операционной системы), а префиксные сразу обращаются к функциям операционной системы. Таким образом, префиксные функции являются блоко-ориентированными, а их использование приносит выигрыш при переносе целой группы файлов (кратной размеру сектора диска 512 байт). Потоковые функции приносят выигрыш при работе с символьными и строковыми данными.
Ввод / вывод в С++ также реализуется:
с помощью функций, унаследованных от библиотеки С (префиксных);
с помощью потоков С++.
Смешивать эти два способа в одной программе можно только синхронизировав ввод с помощью функции sync_with_stdio().
Преимущества ввода / вывода в стиле С:
их удобнее использовать при форматированном выводе в программах, не использующих ООП.
Преимущество использования потоков:
они легче в использовании в простых случаях ввода/вывода, не требующих форматирования,
потоковые операции можно переопределить для собственных классов.
Поток– это абстрактное понятие, относящееся к любому переносу данных от источника к приемнику.
Функции библиотеки ввода-вывода языка С++, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток представляет собой этот файл вместе с предоставленными средствами буферизации.
Чтение данных из потока называется извлечением, вывод в поток – помещением (включением).
Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен (оперативная память, файл на диске, клавиатура или принтер).
При работе с потоком можно:
открывать и закрывать потоки (связывать указатели на поток с конкретными файлами);
вводить и выводить строку, символ, форматированные данные, порцию данных произвольной длины;
анализировать ошибки ввода-вывода и достижения конца файла;
управлять буферизацией потока и размером буфера;
получать и устанавливать указатель текущей позиции в файле.
Физически поток представляет собой файл или устройство (например, клавиатуру или дисплей, рассматривающиеся как частный случай файла).
С потоком связано понятие внутреннего указателя, который определяет позицию, с которой начинается следующая операция чтения или записи. При каждой операции чтения или записи происходит автоматическое перемещение указателя.
Обмен с потоком для увеличения скорости передачи данных производится, как правило, через специальную область оперативной памяти – буфер. То есть буфер – это область оперативной памяти, предназначенная для временного хранения данных во время процессов ввода-вывода информации. Буфер накапливает байты, и фактическая передача данных выполняется после заполнения буфера (рис. 2). При вводе это дает возможность исправить ошибки, если данные из буфера еще не отправлены в программу.
Рис. 2. Буферизация данных при работе с потоками
Рассмотрим особенности работы с файлом в каждом из этих режимов.
