Файли довільного доступу (із випадковим доступом) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Файли довільного доступу (із випадковим доступом)



 

Більшість файлів складаються з фіксованого числа записів. Це дозволяє звернутися до будь-якого запису.

Якщо файл створюється, записуються в нього дані, а потім необхідно його скорегувати, тобто виконуються операції введення-виведення, тоді необхідно його відкривати, як:

 

fp.open(“nam.txt”, ios::in | ios::out);

if(!fp)

...

 

Якщо такі ж дії виконуються з бінарним файлом, тоді

 

fp.open(“nam.txt”,ios::in|ios::out|ios::binary);

...

Використання функції seekg().

Ця функція забезпечує зчитування даних, починаючи з будь-якого місця файла.

Формат:

fs_obj. seekg(long_num, origin);

long_num – число байтів у файлі, що Ви хочете пропустити, тобто зчитування даних виконується з заданого місця.

Оскільки файли даних мають великий розмір, необхідно оголосити long_num із типом long int.

origin – є значенням, що повідомляє С++, звідки необхідно почати пропускати байти, зазначені в long_num. Ця змінна може приймати одне з трьох значень:

 

Режим Опис
іos::beg іos::cur ios::end Початок файла Поточна позиція курсору Кінець файла

 

Індикатори режиму ios::beg, ios::cur, ios::end визначені в < iostream. h >

Приклад 1.

Файл читається двічі, перший раз виведення на екран, другий - на принтер.

 

#include <fstream.h>

#include <stdlib.h>

#include <stdio.h>

 

ifstream in_file;

ofstream scr;

ofstream prn;

 

Void main()

{

char in_char;

in_file.open(“name.txt”, ios::in);

if(!in_file)

{

cout << “\n * * ERROR * * \n”;

exit(0);

}

scr.open(“CON”, ios::out);

while(in_file.get(in_char))

scr << in_char;

scr.close();

 

in_file.seekg(0L, ios::beg);

prn.open(“LPT1”, ios::out);

while(in_file.get(in_char))

prn << in_char;

prn.close();

}

 

Приклад 2.

Замість букв i і q, що займають у тексті файла 9 і 17 позиції, замінити на букву X.

 

#include <fstream.h>

fstream fp;

 

Void main()

{

char ch;

fp.open(“alph.txt”,ios::in | ios::out);

for(ch = ’a’; ch <= ’z’; ch++)

fp << ch;

fp.seekg(8L, ios::beg);

fp << ’X’;

fp.seekg(16L, ios::beg);

fp << ’X’;

fp.close();

}

 

Файл alph. txt буде виглядати:

 

abcdefghXjklmnopXrstuvwxyz

 

Приклад 3.

Прочитати файл alph. txt із попереднього прикладу і вивести на екран в зворотнім порядку.

 

#include <fstream.h>

#include <stdlib.h>

#include <stdio.h>

ifstream fp;

 

Void main()

{

int ctr;

char inchar;

fp.open(“alph.txt”, ios::in);

fp.seekg(-1L, ios::end);

for(ctr = 0; ctr <= 25; ctr++)

{

fp >> inchar;

fp.seekg(-2L, ios::cur);

cout << inchar;

}

fp.close();

}

 

Результат:

 

zyxwvutsrXponmlkjXhgfedcba

Використання додаткових функцій роботи з файлами.

read(array, count) – зчитує кількість байтів, визначуваних у count в масив array.

write(array, count) – записує масив із кількістю даних count у файл.

remove(filename) – видаляє файл з ім’ям filename.

Приклади програм роботи з файлами

Приклад 1. Записати масив у файл ot. txt, прочитати його і вивести на екран.

 

#include <fstream.h>

 

Void main()

{

int i;

int mas[10] = {1,20,300,4,50,600,7,80,900,10};

int vix[10];

fstream file;

file.open("ot.txt", ios::in|ios::out);

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

file << mas[i] << " ";

file.seekg(0L, ios::beg);

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

{

file >> vix[i];

cout << vix[i] << " ";

}

file.close();

}

 

Приклад 2. Записати масив у файл ot. txt, прочитати елемент масиву з заданим номером і вивести на екран.

 

#include <fstream.h>

#include <iomanip.h>

 

Void main()

{

int i, zn_el;

long n_el;

int mas[10] = {100,200,3,4,5,6,700,8,9,10};

fstream file;

file.open("ot.txt", ios::in|ios::out);

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

file << setw(4) << mas[i];

cout << "ВВедіть номер елемента -> ";

cin >> n_el;

n_el *= 4;

file.seekg(n_el, ios::beg);

file >> zn_el;

cout <<"\n" << zn_el;

file.close();

}

 

Приклад 3. Записати масив у файл ot. txt, прочитати перші п’ять елементів і вивести їх на екран.

 

#include <fstream.h>

#include <iomanip.h>

 

Void main()

{

int i;

int mas[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

fstream file;

file.open("ot.txt", ios::in|ios::out);

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

file << setw(4) << mas[i];

char st[50];

file.seekg(0L, ios::beg);

file.read(st, 5*4);

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

{

(st+i*4)[4] = 0;

cout << (st+i*4+1) << "\n";

}

file.close();

}

 

Приклад 4. Записати масив порядково у файл ot. txt, прочитати і вивести на екран кожний рядок.

 

#include <fstream.h>

#include <iomanip.h>

 

Void main()

{

int i;

char mas[3][10]={"Сидоров","Петров","Іванов"};

fstream file;

file.open("ot.txt", ios::in|ios::out);

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

file << setw(10) << mas[i] << "\n";

char st[20];

file.seekg(0L, ios::beg);

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

{

file.getline(st, 20);

cout << st << "\n";

}

file.close();

}

 

 

ТЕМА 10. СТРУКТУРИ

ПЛАН

1. Загальна характеристика структури.

2. Масиви структур.

3. Використання масивів, як елементів структур.

 



Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 192; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.136.235 (0.019 с.)