446.50K
Category: programmingprogramming

Программирование на языках высокого уровня

1.

Программирование на языках
высокого уровня

2.

Файлы данных
Хранение данных через переменные или массивы
является временным, до конца работы программы.
Для долговременного хранения предназначены
файлы, размещенные на внешних носителях.

3.

Файлы данных
Логически файл можно представить как цепочку
байт, имеющих начало и конец.
Работа с файлами предполагает операции:
Создание файла
Запись в файл
Чтение из файла
Добавление информации

4.

Файлы данных
Чтение из файла и запись в файл определяется
положением внутреннего указателя
Положение указателя меняется либо
автоматически (при чтении или записи) либо за
счет явного управления его положением

5.

Функции работы с файлами
<fstream.h>
ofstream <файловая переменная> (<имя
файла>, ios:: <режим>);
-
открывает файл для записи
Например:
ofstream ff ("ff.dat", ios :: out)
файловая
имя файла
переменная
(путь доступа к файлу)
режим

6.

Файлы данных
Под именем файла понимается не только его
название, но и расширение
Если файл не находится в одной папке с
программным кодом, то прописывают путь доступа
к файлу
При обращении к файлу используют файловую
переменную. Файловая переменная – это
уникальный идентификатор, строится по все
правилам построения идентификаторов языка С++

7.

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

8.

Режимы обращения к файлу при
записи:
ios :: out
– создание нового файла, внутренний
указатель автоматически устанавливается в
начало файла
ios :: app
– дозапись в уже существующий файл,
внутренний указатель устанавливается в
конец файла

9.

Функции работы с файлами
<fstream.h>
ifstream <файловая переменная> (<имя
файла>, ios :: <режим>);
- открыть файл для чтения
Режим чтения из файла:
ios :: in
- чтение из файла, внутренний указатель
автоматически устанавливается в начало файла

10.

Функции работы с файлами
<fstream.h>
При каждом чтении из файла, внутренний
указатель перемещается на начало
следующей компоненты файла
Компонента файла – это та порция
информации, которая была записана в
файл при его создании

11.

Функции работы с файлами
<fstream.h>
fstream <файловая переменная> (<имя
файла>, ios:: <режим>);
- открыть файл для записи и чтения
Режим:
ios :: ate
- запись в файл, указатель устанавливается в
конец файла.
Например:
fstream ff ("ff.dat", ios::in | ios :: out);

12.

Функции работы с файлами
<fstream.h>
Работа с файлами предполагает проверку
на существование файла как при записи в
файл, так и при чтении из файла.
В проверке указывается файловая
переменная, связанная с именем файла при
открытии и принимающая одно из двух
значений: true или false

13.

Функции работы с файлами
<fstream.h>
После открытия файла желательна
осуществить проверку:
if ( ! ff ) {cout<< " file error ! " ; exit (1) ; }
Если не удалось, по какой-либо причине
открыть файл, после соответствующего
сообщения, прерывается исполнение
программы

14.

Функции работы с файлами
<fstream.h>
ff .close ();
- закрытие файла
где ff - файловая переменная.

15.

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

16.

Файлы последовательного
доступа
Запись в файл одой компоненты:
ff << name<< “\n'‘;
файловая
переменная
переменная
отделяет одну единицу
информации от другой
Чтение из файла одой компоненты:
ff >> name;
Запись в файл и чтение из файла аналогично
организации потоков ввода-вывода информации

17.

Задача:
Создать файл целых чисел.
Сформировать из него два файла, один с
четными числами исходного файла, другой
– с нечетными

18.

Программа
#include<fstream>
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{ ofstream f ( "f.dat" );
файловая
переменная
имя файла
// для работы с файлом
// открыть файл для записи

19.

Программа
int x, n;
cout<<"\n Введите n \n"; cin>>n;
cout<<"\n Введите сами числа\n";
for ( int i=1; i<=n; i++)
{ cin>>x;
// ввод с клавиатуры
f<<x<<"\n"; }
// запись в файл
f.close();
// закрыть файл
ifstream ff ( "f.dat");
// открыть файл для чтения

20.

Программа
ofstream fc("fc.dat"); //открыть файл для записи четных
ofstream fn("fn.dat");
// открыть файл для записи нечетных
cout<<" \n Исходный файл \n";
while ( ff>>x )
// чтение из файла
{ cout<<"\n x="<<x;
// вывод на экран
if ( fmod(x,2)==0)
fc<<x<<"\n" ;
// запись четных чисел
else fn<<x<<"\n" ; }
// запись нечетных чисел

21.

Программа
// закрыть все файлы
ff.close(); fc.close(); fn.close();
// открыть файлы для чтения
ifstream ffc("fc.dat");
ifstream ffn("fn.dat");
cout<<"\n Файл четных чисел\n" ;
while ( ffc>>x )
// чтение из файла
{ cout<< "\n x= "<<x; }
// вывод на экран

22.

Программа
cout<<"\n Файл нечетных чисел \n" ;
while ( ffn>>x )
// чтение из файла
{ cout<< "\nx="<<x; }
// вывод на экран
ffc.close(); ffn.close();
getch();
}

23.

Задача
Создать файл, содержащий информацию о
товарах некоторого склада:
наименование
количество
цена
Подсчитать общую стоимость товаров на
складе
(Сформировать файл структур)

24.

Программа
#include<fstream>
// для работы с файлом
#include<iostream>
#include<conio.h>
# define FILE "f.dat" // имя файла
using namespace std;
int main()

25.

Программа
{
// пользовательский тип - структура
struct Tovar { char name [10];
int kol;
float c;
};
Tovar a;
// буфер обмена с файлом

26.

Программа
float s=0;
// общая стоимость товаров
int n;
// кол-во наименований товаров
ofstream f(FILE); // открытьфайл для записи
cout<<"\n Введите n \n";
cin>>n;

27.

Программа
for ( int i=1; i<=n; i++)
{ cout<<"\n Введите наименов "; cin>>a.name;
cout<<"\n Введите кол-во "; cin>>a.kol;
cout<<"\n Введите цену "; cin>>a.c;
// запись в файл
f << a.name<<"\n"<< a.kol<<"\n"<< a.c<<"\n";
}
f.close();
// закрыть файл

28.

Программа
ifstream ff(FILE);
// открыть файл для чтения
cout<<"\n Перечень товаров \n";
for ( int i=1; i<=n; i++)
{ ff>>a.name>>a.kol>>a.c; // чтение из файла
cout<<"\n"<<a.name<<"\t"<<a.kol<<"\t"<<a.c;
s+=a.kol * a.c;
}

29.

Программа
cout<<"\nОбщая стоимость товаров s=
"<<s;
ff.close();
getch();
}
Препроцессорная команда
#define
задаёт символическую константу FILE,
связанная с именем файла.

30.

Файлы произвольного доступа
Если требуется частый доступ к данным,
хранящимся в некотором файле, следует
использовать файлы с произвольным
доступом.
Файлы с произвольным доступом - файлы,
хранящие информацию в
структурированном виде.

31.

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

32.

Файлы произвольного доступа
Запись в файл произвольного доступа
реализует функция - write
а позиционирование функция – seekp
(put – положить)
Чтение из файла реализует функция - read,
а позиционирование функция – seekg
(get – взять)

33.

Примеры:
ff.seekp (n);
ff.write ( ( char *)&t, sizeof(t));
- установить внутренний указатель на n-ый
байт от начала файла и записать
значение переменной t с размером
sizeof(t) байт, начиная с позиции n вперед
(ff – файловая переменная)

34.

Примеры:
ff.seekg (n);
ff.read (( char *)&t, sizeof(t));
- установить внутренний указатель на n-ый
байт от начала файла и присвоить
переменной t(считать) значение,
записанное от позиции n на sizeof(t) байт
вперед

35.

Функции управления внутренним
указателем
Функция
Назначение
seekg
устанавливает внутренний указатель
в файле при чтении
seekp
устанавливает внутренний указатель
в файле при записи
tellg
определяет позицию внутреннего
указателя при чтении
tellp
определяет позицию внутреннего
указателя при записи

36.

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

37.

Задача
Создать файл, содержащий информацию о
товарах некоторого склада (файл структур):
наименование
количество
цена

38.

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

39.

Задача
Используя файл, созданный предыдущей
программой, увеличить стоимость
определенного товара на 50%

40.

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

41.

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

42.

Текстовые файлы
С помощью любого текстового редактора
можно просмотреть содержимое
текстового файла
При записи информации в текстовый
файл, все данные преобразуются к
символьному типу и хранятся в
символьном виде
В конце текстового файла присутствует
признак конца файла

43.

Запись в файл
Описание файловой переменной:
ofstream <файловая переменная>;
Функция открытия файла для чтения:
ff.open(<имя файла>, <режим>);
Запись информации в текстовый файл:
ff<<a;

44.

Запись в файл
Для того чтобы записывать данные в
текстовый файл, необходимо:
описать файловую переменную
типа ofstream
открыть файл с помощью
функции open[опэн
вывести информацию в файл
обязательно закрыть файл

45.

Чтение из файла
Описание файловой переменной:
ifstream <файловая переменная>;
Функция открытия файла для чтения:
ff.open(<имя файла>, <режим>);
Чтение информации из текстового файла:
ff>>a;

46.

Чтение из файла
Для того, чтобы считать данные из текстового
файла, необходимо:
описать файловую переменную типа ifstream
открыть файл с помощью функции open
считать
информацию из файла, при
считывании
каждой
порции
данных
необходимо проверять, достигнут ли конец
файла
закрыть файл

47.

Закрытие файла
Закрытие файла:
ff.close();
Признак конца файла:
ff.eof();

48.

Признак конца файла
while( ! ff.eof() )
{ /* чтение очередного значения
из потока ff в переменную buf */
ff>>buf;
cout<<buf; }

49.

Признак конца файла
Два числа в текстовом редакторе считаются
разделенными, если между ними есть хотя бы
один из символов: пробел, табуляция, символ
конца строки
Для определения конца файла используют
функцию eof
Файловая переменная ff – может принимать
одно из двух значений: true или false,в
зависимости от того достигнут ли конец файла.

50.

Режимы записи в файл
Режимы записи в файл:
1. ios :: out
2. ios :: app
3. ios :: ate
4. ios::trunc

51.

Режимы чтения и записи в файл
Первый режим - открыть файл в режиме записи
данных, при этом информация в существующем
файле уничтожается
Второй режим - открыть файл в режиме записи
данных в конец файла
Третий режим – передвинуть внутренний
указатель в конец уже открытого файла
Четвертый режим - очистить файл, действия,
аналогичные первому режиму

52.

Режимы чтения из файла
Режим чтения из файла:
ios :: in
открыть файл в режиме чтения данных,
режим является режимом по умолчанию
для потоков ifstream

53.

Режимы чтения из файла
1. Открытие файла записи:
ofstream ff;
open(fil.txt, ios::out);
2. Открытие файла для чтения:
ifstream ff;
open(fil.txt, ios::in);
3. Открытие файла для записи и чтения:
fstream ff;
open(fil.txt);

54.

Обработка текстовых файлов
#include<iostream>
#include<fstream>
#include<conuo.h>
using name std;
int main()
{ int i, n;
double buf;
ofstream f;
ff.open("file.txt", ios::out);

55.

Обработка текстовых файлов
cout<<"\n Введите количество чисел n=";
cin>>n;
// запись в текстовый файл
for( i=1; i<n; i++)
{ cout<<i<<"число=";
cin>>buf;
f<<buf<<"\t"; }
f.close();

56.

Обработка текстовых файлов
ifstream ff;
ff.open("file.txt", ios::in);
cout<<"\n Созданный файл \n";
// чтение из текстового файла
while( ! ff.eof() )
{ ff>>buf;
cout<<buf<<"\t"; }
ff.close();
getch();}

57.

Спасибо за внимание!
English     Русский Rules