Текстовые и бинарные файлы презентация

Содержание

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

Слайд 1Текстовые и бинарные файлы


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

в состав компьютера (дисплей, клавиатура, принтер, жесткий диск и др.).

Поток– это логический интерфейс, который связан с файлом, в том числе и с физическим файлом, размещаемом или размещенном в дисковом пространстве компьютера (жестком диске).

Текущая позиция или указатель потока (файла)– это место в потоке (файле), с которого будут выполняться следующие операции доступа к компонентам потока


Слайд 3#include
ifstream – входной поток. Используется только для чтения информации из

файла

ofstream – выходной поток. Используется только для вывода информации в файл

fstream – двунаправленный поток. Используется для чтения и записи в файл.

Три файловых потока:


Слайд 4Закрытие файла
fstream file; file.open(“text”, ios::binary || ios::in || ios::out);
Проверка открытия файла:

if(!file) cout

Не удается открыть файл”;
return 1;

Открытие файла

file.close();


Слайд 5#include
#include
#include
using namespace std;
int main()
{ setlocale(LC_CTYPE,"Russian");
cout

не открыт"< file.close();
return 0;
}

Слайд 6Чтение и запись данных текстовых файлов
int x;
ifstream in; ofstream out;
in>>x; out


Слайд 7Запись и чтение значений элементов матрицы
#include
#include
#include
#include
using namespace

std;
int main()
{
cout<<"input name>";
char name[25]="";// определение переменной для имени файла
gets(name); // ввод имени файла с клавиатуры
ifstream in; // описание входного файлового потока
ofstream out; // описание выходного файлового потока
out.open(name);// открытие файла с именем name


Слайд 8if(!out){cout

был открыт выход из программы
int matr[5][5]; // описание матрицы
// формирование матрицы
for(int i=0; i<5; i++)
{
for(int j=0;j<5;j++)
{
matr[i][j]=rand()/1000-100;
// запись элемента матрицы i,j в файловый поток
out< out< }
out.close(); // закрытие файлового потока


Слайд 9 in.open(name);// открытие файлового потока для чтения
if(!in){cout

1;}
int matr1[5][5]; // описание матрицы //формирование матрицы
for(int i=0; i<5; i++)
{
for(int j=0;j<5;j++)
{
in>>matr1[i][j];
cout< }
cout< }
in.close();// закрытие входного файлового потока
return 0; 
}

Слайд 10Результат выполнения


Слайд 11Пример. Определить количество строк текстового файла, в котором первая и последняя

буквы одинаковы

#include
#include
#include
#include
#include
using namespace std;
 int main()
{
setlocale(LC_CTYPE,"Russian");
char name[25];
cout<<"Введите имя файла >";gets(name);
ifstream in (name);


Слайд 12if(!in) {
cout

и заканчивающихся одной и той же буквой = "< else cout<<"Cтрок начинающихся и заканчивающихся одной и той же буквой нет "< return 0;
}

Слайд 14Функции чтения и записи символов в бинарных файлах
Прототипы функций:
istream &get(char &ch);
ostream

&put(char ch);

Функция get() считывает из файлового потока символ и помещает его в переменную ch.

Функция put() записывает значение переменной ch в файловый поток.



Слайд 15Считывание символов из файла и вывод их на экран
Исходный файл с

данными:

Слайд 16#include
#include
#include
#include
using namespace std;
int main()
{ setlocale(LC_CTYPE,"Russian");
cout

ios::binary);// открытие двоичного файла
if(!in){cout<<"Файл для чтения"<return 1;}

Слайд 17 char a;
while(!in.eof())
{
in.get(a);
cout


Слайд 19Считывание и запись в файл блоков данных
Прототипы функций:
istream &read(char *buf, streamsize

num);
-считывает num байт данных из связанного с файлом потока в буфер buf

ostream &write(const char *buf, streamsize num);
записывает num байт данных в связанный с файлом поток из буфера buf

Слайд 20struct Tutors
{
char name[25];
int years;
char step[10];
int stag;
};
В первой части программы запишем в

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

Пример


Слайд 21#include
#include
#include
#include
using namespace std;
struct Tutors
{
char name[25];
int years;
char step[10];
int

stag;
};

Слайд 22Tutors t[10]={
"Ivanov",25,"ktn",3,
"Petrov",45,"no",20,
"Sidorov",35,"ktn",6,
"Kulikov",58,"dtn",30,
"Sokolova",45,"ktn",22,
"Drobysheva",43,"no",10,
"Golova",50,"ktn",28,
"Balabanov",60,"ktn",35,
"Ezdakov",39,"no",17,
"Asharina",45,"ktn",18
};


Слайд 23int main()
{
setlocale(LC_CTYPE,"Russian");
cout

открыт"< out.write((char* ) &t, sizeof t);
out.close();
ifstream in;
in.open(name, ios::binary);
if(!in){cout<<"файл для чтения "<

Слайд 24Tutors a;
in.read((char* ) &a,sizeof a);
cout

{
cout< cout< cout< }
in.close();
return 0;
}

Слайд 26Функции для работы с файловыми потоками
istream &get(char *buf, streamsize num);

считывание символов

в массив buf до тех пор, пока не будет считано num-1 символов, или не встретится символ новой строки или символ конца файла.
После выполнения функции в массив buf будет добавлен символ конца строки (\0).

Слайд 27istream &get(char *buf, streamsize num, char delim);

считывание символов в массив buf

до тех пор, пока не будет считано num-1 символов, или не встретится символ заданный параметром delim , или символ конца файла. После выполнения функции в массив buf будет добавлен символ конца строки (\0). Символ, заданный delim в массив buf не записывается, он остается во входном потоке до следующей операции ввода.

Слайд 28int get();
возвращает из потока следующий символ.

sreamsize gcount();
возвращает количество символов, считанных при

выполнении последней операции ввода.

istream &getline(char *buf, streamsize num);
считывание символов в массив buf до тех пор, пока не будет считано num-1 символов, или не встретится символ новой строки или символ конца файла. После выполнения функции в массив buf будет добавлен символ конца строки (\0). Если встретится символ новой строки, то он в buf не помещается, а из входного потока извлекается

Слайд 29istream &getline(char *buf, streamsize num, char delim);
считывание символов в массив buf

до тех пор, пока не будет считано num-1 символов, или не встретиться символ заданный параметром delim , или символ конца файла. После выполнения функции в массив buf будет добавлен символ конца строки (\0). Символ, заданный delim в массив buf не записывается, но извлекается из входного потока

int peek();
считывает следующий символ из входного потока, но не удаляет его из него

Слайд 30istream &putback (char c);
возвращает последний считанный символ из потока в него.

ostream

&flush();
немедленно перезаписывает содержимое буферов на жесткий диск, не дожидаясь их (буферов) заполнения. Как правило, информация накапливается во внутреннем буфере. Пока буфер не будет полностью заполнен информация на диск не переносится. Эта операция позволяет немедленно переписать данные на диск.

Слайд 31Произвольный доступ
Только для бинарных файлов

Указатель get – указывает на позицию файла

при вводе данных

Указатель put – на позицию файла при выводе данных.

Слайд 32Прототипы функций:
istream &seekg( off_type offset, seekdir origin);
перемещает текущий get-указатель на offset

байт относительно позиции, заданной origin.

istream &seekp( off_type offset, seekdir origin);
перемещает текущий put-указатель на offset байт относительно позиции, заданной origin.


Слайд 33istream &seekg( off_type offset, seekdir origin);

off_type - это целочисленный тип,

позволяющий хранить самое большое значение, которое может принимать параметр offset.
Тип seekdir – это перечисление, принимающее следующие значения:
ios::beg - начало файла
ios::cur - текущая позиция
ios::end - конец файла


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

сортирует их в порядке убывания.

#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int n=25; // количество элементов массива


Слайд 35void out_file(fstream &f, int n);// функция вывода значений

int main()
{
setlocale(LC_CTYPE,"Russian");// установка русского

языка для //вывода на экран
srand((unsigned)time(NULL));// инициализация датчика сл.чисел
ofstream out;// описание файлового потока
cout<<"Введите имя файла >";
char name[n];
gets(name); // ввод имени файла
out.open(name,ios::binary | ios::out);// открытие файла
if(!out){cout<<"Файл для записи "<

Слайд 36//запись в файл сл.чисел
for(int i=0;i

описание файлового потока
file.open(name,ios::binary | ios::out |ios::in); //открытие файла
if(!file){cout<<"Файл для чтения записи "<

Слайд 37 cout

n_max;
for(int i=0;i {
file.seekg(i);
file.get(max);
n_max=i;
for(int j=i+1;j {
file.get(b);
if(b>max)
{
max=b;
n_max=j;
}
}

Слайд 38 file.seekg(i);
file.get(b);
file.seekp(i);
file.put(max);
file.seekp(n_max);
file.put(b);
}
cout


Слайд 39void out_file(fstream &f, int n)// функция вывода значений //массива на экран
{
f.seekg(0);//

установка указателя на начало
char a;
for(int i=0;i {
f.get(a);// чтение значения из файла
cout<<(int)a<<" ";// вывод на экран
}
cout<}

Слайд 41Пример совместного использования текстовых и бинарных файлов
Информация о преподавателях хранится в

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


Слайд 42#include
#include
#include
#include
#include
using namespace std;
// структура Преподаватели
struct Tutors
{
char

name[25];
int years;
char step[10];
int stag;
};

Слайд 43// функция вывода на экран содержимого файла
void outfile(fstream& f, int n)
{
  Tutors

a;
f.seekg(0);// установить указатель файла на начало
cout< for(int i=0; i {
f.read((char *)&a,sizeof a);// чтение из файла сout< cout< }
}

Слайд 44// функция чтения данных из текстового файла и запись данных в

бинарный файл
int read_f(fstream &f, fstream &out)
{
int i=0;Tutors a;
while(!f.eof())// пока не конец файла
{
f>>a.name>>a.years;f>>a.step;f>>a.stag;
out.write((char *) &a, sizeof a);
i++;
}
return i;
}


Слайд 45// функция сортировки компонентов бинарного файла в алфавитном порядке
void sort(fstream &f,int

n)
{
Tutors min,a;
int n_min;
for(int i=0;i {
f.seekg(i*(sizeof a));
f.read((char *)&min,sizeof min);
n_min=i;
for(int j=i+1;j {
f.read((char *)&a,sizeof a);
if(strcmp(a.name,min.name)<0)
{
min=a;
n_min=j;
} }

Слайд 46f.seekg(i*(sizeof a));
f.read((char *) &a,sizeof a);
f.seekp(i*(sizeof a));
f.write((char *) &min,sizeof min);
f.seekp(n_min*(sizeof a));
f.write((char *)

&a,sizeof a);

}
}



Слайд 47// функция формирования нового файла из данных попадающих в заданный интервал
int

IsYears(fstream &f,fstream &f_new,int n,int c, int d)
{
int k=0;
Tutors a;
f.seekg(0);f_new.seekp(0);
for(int i=0;i {
f.read((char *) &a,sizeof a);
if(a.years>=c && a.years<=d)
{
k++;
f_new.write((char *) &a, sizeof a);
}
}
return k;
}

Слайд 48// функция формирования нового файла из данных, в которых стаж больше

с
int IsStag(fstream &f,fstream &f_new,int n,int c)
{
int k=0;
Tutors a;
f.seekg(0);f_new.seekp(0);
for(int i=0;i {
f.read((char *) &a, sizeof a);
if(a.stag>=c )
{
k++;
f_new.write((char *) &a,sizeof a);
}
}
return k; }

Слайд 49int main()
{
setlocale(LC_CTYPE,"Russian");
fstream in ("data.txt", ios::in);
if(!in)
{
cout

| ios::binary);
if(!out)
{
cout<<"не открыт data.dat"< return 1;
}


Слайд 50int size_f=read_f(in,out);
in.close();out.close();
fstream out_f ("data.dat", ios::in | ios::out | ios::binary);
if(!out_f)
{
cout

1;
}

sort(out_f,size_f);
outfile(out_f,size_f);


Слайд 51fstream out_f1 ("d.dat", ios::in | ios::out | ios::binary);
if(!out_f1)
{
cout


cout<<"Введите через пробел возрастной интервал >";
int c,d;
cin>>c; cin>>d;
outfile(out_f1,IsYears(out_f,out_f1,size_f,c,d));
cout<<"Введите стаж>";


Слайд 52cin>>c;
outfile(out_f1,IsStag(out_f,out_f1,size_f,c));
out_f.close();out_f1.close();
return 0;
}


Слайд 53Местоположение исходного текстового файла







Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

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


Для правообладателей

Яндекс.Метрика