Мегаобучалка Главная | О нас | Обратная связь


Обработка элементов файла



2016-09-16 840 Обсуждений (0)
Обработка элементов файла 0.00 из 5.00 0 оценок




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

void del(char *filename)

{//удаление записи с номером х

FILE *f;//исходный файл

FILE*temp;//вспомогательный файл

//открыть исходный файл для чтения

f=fopen(filename,”rb”);

//открыть вспомогательный файл для записи

temp=fopen(”temp”,”wb”)

student a;//буфер для чтения данных из файла

//считываем данные из исходного файла в буфер

for(long i=0; fread(&a,sizeof(student),1,f);i++)

if(i!=x)//если номер записи не равен х

{

//записываем данные из буфера во временный файл

fwrite(&a,sizeof(student)1,temp);

}

else

{

cout<<a<<" - is deleting...";

}

fclose(f);//закрываем исходный файл

fclose(temp); //закрываем временный файл

remove(filename);//удаляем исходный файл

rename(”temp”, filename);//переименовываем временный файл

}

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

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

Для добавления элементов конец файла достаточно открыть его в режиме “a” или “a+” (для добавления) и записать новые данные в конец файла.

f=fopen(filename,”ab”);//открыть файл для добавления

cout<<"\nHow many records would you add to file?";

cin>>n;

for(int i=0;i<n;i++)

{

//прочитать объект

fwrite(&a,sizeof(student),1,f);//записать в файл

}

fclose(f);//закрыть файл

 

2.3. Потоковый ввод-вывод в стиле С++

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

По направлению обмена потоки можно разделить на

· входные (данные вводятся в память),

· выходные (данные выводятся из памяти),

· двунаправленные (допускаю­щие как извлечение, так и включение).

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

· стандартныепотокипредназначены для передачи данных от клавиатуры и на экран дисплея,

· файловыепотокидля обмена информацией с файлами на внеш­них носителях данных (например, на магнитном диске),

· строковыепотоки— для работы с массивами символов в оперативной памяти.

Для работы со стандартными потоками библиотека C++ содержит библиотеку <iostream.h>. При этом в программе автоматически становятся доступными объекты:

· cin - объект, соответствует стандартному потоку ввода,

· cout - объект, соответствует стандартному потоку вывода.

Оба эти потока являются буферизированными.

Форматированный ввод/вывод реализуется через две операции:

· << - вывод в поток;

· >> - чтение из потока.

Использование файлов в программе предполагает следующие операции:

· создание потока;

· открытие потока и связывание его с файлом;

· обмен (ввод/вывод);

· уничтожение потока;

· закрытие файла.

Для работы со файловыми потоками библиотека C++ содержит библиотеки:

· <ifstream.h> - для работы с входными потоками,

· <ofstream.h> - для работы с выходными потоками

· <fstream.h> - для работы с двунаправленными потоками.

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

Для создания файлового потока используются специальные методы –конструкторы, которые создают поток соответствующего класса, от­крывают файл с указанным именем и связывают файл с потоком:

· ifstream(const char *name, int mode = ios::in);//входной поток

· ofstream(const char *name, int mode = ios::out | ios::trunc);//выходной поток

· fstreamCconst char *name, int mode = ios::in | ios::out);//двунаправленный поток

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

ios::in открыть файл для чтения;
ios::out открыть файл для записи;
ios::ate установить указатель на конец файла, читать нельзя, можно только записывать данные в конец файла;
ios::app открыть файл для добавления;
ios::trunc если файл существует, то создать новый;
ios::binary открыть в двоичном режиме;
ios::nocreate если файл не существует, выдать ошибку, новый файл не открывать
ios::noreplace если файл существует, выдать ошибку, существующий файл не открывать;

Открыть файл в программе можно с использованием либо конструкторов, либо метода open, имеющего такие же параметры, как и в соответствующем конструк­торе.

fstream f; //создает файловый поток f

//открывается файл, который связывается с потоком

f.open(“..\\f.dat”,ios::in);

// создает и открывает для чтения файловый поток f

fstream f (”..\\f.dat”,ios::in);

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

Если в процессе работы возникнет ошибочная ситуация, то потоковый объект принимает значение равное 0.

Когда программа покидает область видимости потокового объекта, то он уничтожается, при этом перестает существовать связь между потоковым объектом и физическим файлом, а сам файл закрывается. Если файл требуется закрыть раньше, то используется метод close().

//создание файла из элементов типа person

struct person

{

char name[20];

int age;

};

person *mas;//динамический массив

fstream f("f.dat",ios::out);//двунаправленный файловый поток

int n;

cout<<"N?";

cin>>n;

mas=new person[n];//создаем динамический массив

for(int i=0;i<n;i++)

{

cout<<"?";

//ввод одного элемента типа person из стандартного потока cin

cin>>mas[i].name;

cin>>mas[i].age;

}

//запись элементов массива в файловый поток

for(i=0;i<n;i++)

{

 

f<<mas[i].name;f<<"\n";

f<<mas[i].age;f<<"\n";

 

}

f.close();//закрытие потока

 

//чтение элементов из файла

person p;

f.open("f.dat",ios::in);//открываем поток для чтения

do

{

/*читаем элементы типа person из файлового потока f в переменную p*/

f>>p.name;

f>>p.age;

// если достигнут конец файла, выходим из цикла

if (f.eof())break;

//вывод на экран

cout<<p.name<<" "<<p.age<<"\n";

 

}while(!f.eof());

f.close();//закрытие потока

 

Постановка задачи

  1. Используя ввод-вывод в стиле С создать файл и записать в него структурированные данные.
  2. Вывести созданный файл на экран.
  3. Удалить из файла данные в соответствии с вариантом.
  4. Добавить в файл данные в соответствии с вариантом.
  5. Вывести измененный файл на экран.
  6. Используя ввод-вывод в стиле С++ создать файл и записать в него структурированные данные.
  7. Вывести созданный файл на экран.
  8. Удалить из файла данные в соответствии с вариантом.
  9. Добавить в файл данные в соответствии с вариантом.
  10. Вывести измененный файл на экран.
№ варианта Структура данных Удаление Добавление
Структура "Абитуриент": - фамилия, имя, отчество; - год рождения; - оценки вступительных экзаменов (3); - средний балл аттестата.   Удалить элемент с указанным номером.   Добавить K элементов в начало файла
Структура "Сотрудник": - фамилия, имя, отчество; - должность - год рождения; - заработная плата.   Удалить элемент с указанной фамилией Добавить K элементов в конец файла
Структура "Государство": - название; - столица; - численность населения; - занимаемая площадь.   Удалить все элементы, у которых численность меньше заданной.   Добавить элемент с номером К
Структура "Человек": - фамилия, имя, отчество; - домашний адрес; - номер телефона; - возраст.   Удалить все элементы с заданным возрастом.   Добавить N элементов с номером К
Структура "Человек": - фамилия, имя, отчество; - год рождения; - рост; - вес.   Удалить все элементы с указанным ростом и весом.   Добавить K элементов в начало файла
Структура "Школьник": - фамилия, имя, отчество; - класс; - номер телефона; - оценки по предметам (математика, физика, русский язык, литература).   Удалить все элементы, у которых есть 2 хотя бы по одному предмету.   Добавить K элементов в конец файла
Структура "Студент": - фамилия, имя, отчество; - домашний адрес; - группа; - рейтинг.   Удалить все элементы, у которых рейтинг меньше заданного.   Добавить элемент с номером К
Структура "Покупатель": - фамилия, имя, отчество; - домашний адрес; - номер телефона; - номер кредитной карточки Удалить К элементов из начала файла.   Добавить N элементов с номером К
Структура "Пациент": - фамилия, имя, отчество; - домашний адрес; - номер медицинской карты; - номер страхового полиса.   Удалить элемент с заданным номером медицинской карты.   Добавить K элементов в начало файла
Структура "Информация": - носитель; - объем; - название; - автор.   Удалить первый элемент с заданным объемом информации.   Добавить K элементов в конец файла
Структура "DVD-диск": - название фильма; - режиссер; - продолжительность; - цена.   Удалить все элементы с ценой выше заданной.   Добавить элемент с номером К
Структура "DVD- диск": - название; - режиссер; - продолжительность; - цена.   Удалить первый элемент с заданной продолжительностью.   Добавить N элементов с номером К
Структура "Спортивная команда": - название; - город; - количество игроков; - количество набранных очков.   Удалить все элементы с количеством очков меньше заданного.   Добавить K элементов в начало файла
Структура "Стадион": - название; - адрес; - вместимость; - виды спорта.   Удалить элемент с заданным названием.   Добавить K элементов в конец файла
Структура "Автомобиль": - марка; - год выпуска; - цена; - цвет.   Удалить все элементы, у которых год выпуска меньше заданного.   Добавить элемент с номером К
Структура "Владелец автомобиля": - фамилия, имя, отчество; - номер автомобиля; - телефон; - номер техпаспорта.   Удалить элемент с заданным номером.   Добавить N элементов с номером К
Структура "Фильм": - название; - режиссер; - год выпуска; - стоимость.   Удалить все элементы, у которых стоимость превышает заданную.   Добавить K элементов в начало файла
Структура "Книга": - название; - автор; - год издания; - количество страниц.   Удалить К элементов из начала файла.   Добавить K элементов в конец файла
Структура "Фильм": - название; - режиссер; - страна; - приносимая прибыль.   Удалить К элементов , начиная с номера N из файла.   Добавить элемент с номером К
Структура "Государство": - название; - государственный язык; - денежная единица; - курс валюты относительно $.   Удалить элемент с указанным названием.   Добавить N элементов с номером К
Структура "Автомобиль": - марка; - серийный номер; - регистрационный номер; - год выпуска.   Удалить все элементы с указанной маркой Добавить K элементов в начало файла
Структура "Владелец автомобиля": - фамилия, имя, отчество; - номер автомобиля; - номер техпаспорта; - отделение регистрации ГАИ.   Удалить элемент с заданным номером.   Добавить K элементов в конец файла
1. Структура "Стадион": - название; - год постройки; - количество площадок; - виды спорта.   Удалить все элементы, у которых год постройки меньше заданного.   Добавить элемент с номером К
Структура "Студент": - фамилия, имя, отчество; - номер телефона; - группа; - оценки по 3 основным предметам.   Удалить все элементы из группы с указанным номером, у которых среднее арифметическое оценок меньше заданного.   Добавить N элементов с номером К
Структура "Студент": - фамилия, имя, отчество; - дата рождения; - домашний адрес; - рейтинг.   Удалить все элементы с указанным рейтингом Добавить N элементов с номером К

Содержание отчета

  1. Постановка задачи (общая и для конкретного варианта).
  2. Определения функций для реализации поставленных задач.
  3. Определение функции main().
  4. Содержимое исходного файла
  5. Содержимое модифицированного файла.

 



2016-09-16 840 Обсуждений (0)
Обработка элементов файла 0.00 из 5.00 0 оценок









Обсуждение в статье: Обработка элементов файла

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (840)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)