- •Ф.Ф. Павлов языки программирования
- •Санкт-Петербург
- •230201 - Информационные системы и технологии
- •Тема 2 посвящена изучению жизненного цикла программы и основным этапам решения задач на эвм.
- •Тема 4 изучает типы пользовательских интерфейсов, классификацию диалогов и основные компоненты графических пользовательских интерфейсов.
- •Тема 8 посвящена структурам данных фиксированного размера (массивы), а также типам данных, определяемых пользователем (структуры, объединения, перечисления).
- •Тема 10 изучает динамические структуры данных: виды и способы реализации списков, динамическое выделение памяти.
- •Тема 12 затрагивает вопросы обработки файлов данных: понятия записи, файла данных и способы доступа, операции и средства обработки файлов, контроль операций обработки файлов.
- •Тема 14 вводит в технологию объектно-ориентированного программирования.
- •Раздел I Принципы программирования на языках высокого уровня
- •Тема 1. Эволюция языков программирования
- •1.1. Неструктурированное, «стихийное» программирование
- •1.2. Процедурное (модульное) программирование
- •1.3. Объектно-ориентированное программирование
- •1.4. Компонентные технологии программирования
- •Тема 2. Жизненный цикл программы и основные
- •2.1. Дружественность, жизненный цикл программы
- •2.2. Постановка задачи и спецификация программы
- •2.3. Проектирование и реализация программы
- •2.4. Способы записи алгоритма
- •2.5. Критерии качества программы
- •3.1. Классификация программных продуктов
- •3.3. Модели программирования в ms-dos и Windows
- •Тема 4. Диалоговые программы
- •4.1. Типы пользовательских интерфейсов
- •4.2. Классификация диалогов и их реализация
- •4.3. Основные компоненты графических
- •Тема 5. Программа на языке высокого уровня
- •5.1. Структура программы и функции
- •5.2. Стандартные типы данных и операции над ними
- •5.3. Адресные типы данных: указатели и ссылки
- •5.4. Стандартные библиотеки языка
- •5.5. Классы памяти
- •Раздел 2 Управляющие структуры и структуры данных
- •Тема 6. Представление управляющих структур
- •6.1. Структура следования
- •6.2. Структуры ветвления
- •6.3. Структуры повторения
- •Int kol, //счетчик введенных оценок
- •Int god; //число лет
- •Тема 7. Адресные типы данных
- •7.1. Указатели
- •7.2. Ссылки
- •Тема 8. Структуры данных фиксированного размера
- •8.1. Массивы
- •8.2. Типы данных, определяемые пользователем
- •Тема 9. Функции (процедуры)
- •9.1. Определение, прототип и вызов функции
- •9.2. Передача параметров
- •9.3. Программирование рекурсивных алгоритмов
- •Тема 10. Динамические структуры данных
- •10.1. Списки: основные виды и способы реализации
- •10.2. Динамическое выделение памяти
- •Раздел 3 Процедурное программирование
- •Тема 11. Ввод/вывод данных
- •11.1. Видеофункции библиотеки conio.H
- •11.2. Функции библиотеки потокового ввода/вывода
- •Тема 12. Обработка файлов данных
- •12.1. Записи и файлы данных
- •12.2. Операции и средства обработки файлов
- •12.3. Контроль операций обработки файлов
- •Тема 13 Технология процедурного программирования
- •13.1. Способы конструирования программ
- •13.2. Проектирование программы: методы декомпозиции и и модульного программирования
- •13.3. Реализация программы: методы структурного
- •Тема 14. Введение в технологию объектно-
- •14.1. Основные понятия объектно-ориентированного
- •14.2. Проектирование программы
- •14.3. Реализация программы
- •Утверждаю
- •Рабочая программа
- •Технология программирования
- •Санкт-Петербург
- •Тема 1. Технология программирования и этапы ее
- •Тема 2. Жизненный цикл программы и основные этапы
Тема 12. Обработка файлов данных
12.1. Записи и файлы данных
Хранение данных в переменных, массивах и структурах является временным. Файлы предназначены для постоянного хранения больших объемов данных на дисках.
Бит - наименьший элемент данных в компьютере, который может принимать значение 0 либо 1.
Символы – это цифры, буквы, специальные символы. Каждый символ представляется как совокупность из 8 нулей и единиц, называемым байтом.
Поле – это группа символов (или байтов), имеющая некоторый смысл.
Запись – это группа связных полей. Одно из полей записи выбирается в качестве ее ключа для идентификации записи.
Файл – это группа связных записей.
Совокупность программ, предназначенных для создания баз данных и управления ими, называется системой управления базой данных - СУБД.
Виды хранимых данных файла:
- файлы с непрерывной последовательностью символов,
- файлы из строк символов переменной длины,
- файлы из форматированных данных разного типа с разделителями (пробелами),
- файлы из записей фиксированной длины состоят из компонент типа структура.
12.2. Операции и средства обработки файлов
Язык C++ не имеет встроенных в язык средств файлового ввода/вывода. Для этого используются библиотеки ввода/вывода. Настоятельно рекомендуем пользоваться базовой библиотекой потокового ввода/вывода iostream C++, как наиболее гибкой и удобной по сравнению с другими библиотеками, например, с stdio.
Потоком называется абстрактное понятие, относящееся к переносу данных от источника к приемнику. Имя потока используется в операциях записи и чтения файла. Файл - это поименованная совокупность данных, хранящаяся на внешнем носителе.
Основными этапами (операциями) обработки файлов являются:
открытие потока;
связывание потока с файлом;
запись и чтение данных файла;
закрытие файла.
Существуют предопределенные потоки, для которых не нужны операции открытия потока и связывания его с файлом: cin - стандартный поток ввода данных (файл - клавиатура); cout - стандартный поток вывода данных(файл -экран дисплея); cerr- стандартный поток вывода ошибок; буферизируется поблочно, очистка буфера производится при каждой новой вставке; clog - полностью буферизированная версия cerr.
Для использования средств управления файлами базовой библиотеки потокового ввода/вывода необходимо включить в программу два файла заголовков:
#include <iostream> и
#include <fstream>.
Открытие потока заключается в объявлении идентификатора потока и по умолчанию режима открытия (ввод, вывод, ввод и вывод).
- Синтаксис оператора открытия потока:
ifstream p; //открытие потока p на чтение (ввод)
ofstream p; //открытие потока p на запись (вывод)
fstream p; //открытие потока p на чтение и запись
Связывание потока с файлом заключается в назначении открытому ранее потоку конкретного файла на диске, а также в возможности установления дополнительных режимов потока.
- Синтаксис оператора связывания:
p.open(imfile[,<режим 1>|<режим 2>...]); ,где p - имя открытого ранее потока, imfile - имя файла на диске, <режим1>- символическая константа режима открытия файла. Символические константы режимов открытия файла следующие:
ios::in - открытие файла на чтение (ввод);
ios::out - открытие файла на запись (вывод);
ios::app - добавление данных в конец файла;
ios::ate - перемотка к концу файла;
ios::trunc - сжатие файла до нуля (очистка содержимого);
ios::nocreate - если файл не существует, то ошибка;
ios::noreplace - если файл существует, то ошибка;
ios::binary - открытие в двоичном режиме (по умолчанию -
текстовый).
Пример:
ofstrem f1; //первый этап - открытие потока f1
f1.open ("karta.dat", ios::app|ios::binary); //второй этап
Открытый ранее поток f1 связывается с файлом "karta.dat" и открывается на добавление данных в конец файла в двоичном режиме.
Раздельное выполнение операций открытия и связывания позволяет открывать поток только один раз и связывать этот поток с различными файлами.
Операции открытия и связывания можно выполнять одновременно.
- Синтаксис оператора открытия и связывания потока:
ifstream p(imfile[,<режим 1>|<режим 2>...]);
ofstream p(imfile[,<режим 1>|<режим 2>...]);
fstream p(imfile[,<режим 1>|<режим 2>...]);
Пример:
ofstrem f1("karta.dat",ios::app|ios::binary);
Выбор средств для операций чтения/записи определяется видом хранимых данных файла:
- Файлы с непрерывной последовательностью символов используют для записи символа в файл операцию вставки(<<) или функцию put , для чтения символа - операцию извлечения(>>) или функцию get.
Примеры:
p<<ch;//запись символа, p-имя потока, ch-переменная типа char
p.put(ch); //альтернатива операции <<
p>>ch; //чтение символа
p.get(ch); //get с параметром ch=p.get();//get без параметра
- Файлы из строк символов переменной длины используют для записи строки в файл операцию << или функцию write, для чтения строки - операцию >> или функции read или get-строка.
Примеры:
p<<str;//запись строки, str - переменная типа массив char
p.write(str,n);//альтернатива <<, n- кол-во записыв. символов
p>>str; //чтение строки до разделителя (пробел,'\n')
p.get(str,n); //альтернатива >>, n- кол-во читаемых символов
p.read(str,n);
- Файлы из форматированных данных разного типа с разделителями (пробелами) могут использовать для записи и чтения данных операции << и >>, при этом происходят преобразования данных.
- Файлы из записей фиксированной длины состоят из компонент типа структура и могут использовать для записи и чтения целой структуры функции write и read.
Для решения задач информационных систем наиболее приемлемым является вид хранимых данных файла - запись фиксированной длины. Файлы данных являются не текстовыми файлами, и поэтому, предпочтителен двоичный режим записи/чтения (ios::binary), так называемый неформатированный ввод/вывод данных, т.е. без преобразований из двоичного представления в символьный и обратно. Для реализации операций записи и чтения таких данных используем функции write и read.
- Синтаксис операции записи:
p.write((char *)&zap,sizeof(zap)); ,где p - идентификатор потока, zap - переменная типа структура, & - операция адресации, sizeof(zap) - размер переменной zap в байтах.
- Синтаксис операции чтения:
p.read((char *)&zap,sizeof(zap));
- Синтаксис оператора закрытия файла:
p.close( );//закрывается файл,связанный потоком p.
Для организации прямого доступа к записям файла используются функции seekg и seekp.
- Синтаксис функций установки указателей чтения и записи файла на n байт от точки отсчета:
p.seekg((long)n, <точка отсчета>); //указатель чтения
p.seekp((long)n,<точка отсчета>);//указатель записи
Точки отсчета следующие: ios::beg - начало файла, ios::end - конец файла, ios::cur - текущая позиция указателя.
-Синтаксис функций определения текущей позиции указателей:
streampos m=p.tellg; //m - позиция указателя чтения
streampos m=p.tellp; //m - позиция указателя записи ,где streampos -тип,определенный в библиотеке с помощью typedef, как тип long.