Base.close(); // файл зачинений

pause(0); return 0; }

Програма відкриває файл base із вмістом у файлі base1.box, у режимі запису (оголошення ofstream), з додаванням нових записів до існуючих (аргумент ios::app). Коли файл base1.box раніш не існував, то він створюється. Після відкриття файлу здійснюється перевірка успішного виконання цієї операції. Функція pause дозволяє програмісту по його бажанню зупинити або продовжити виконання програми. На екрані виводяться вказівки оператору про порядок введення даних. Для закінчення запису даних застосовується маркер кінця файлу EOF (end of file), який водиться сполученням клавіш Ctrl+z. Запис (вивід у файл) здійснюється у структурі повторення while, де у якості умови застосовується операція ввід з клавіатури cin>>, яка задає значення змінним num, name, balance. Операція base<< здійснює вивід (запис) у файл подібно виводу на екран cout<<. Маркер EOF відображається, як ^Z (у деяких версіях компілятора – не виводиться на екран). При закінчені запису файл base1.box закривається.

Для розміщення програмних та створених текстових файлів передбачена окрема директорія PART1\FILE. Розглянемо програму для зчитування (вводу) із файлу, де ім’я файлу в ОС вводиться директивою #define.

Програма відкриває файл base1.box для зчитування (об’явою ifstream). Програмні імена файлів у програмах запису та зчитування ніяк не пов’язані і вибрані однаковими (base) тільки для зручності.

Зчитування і присвоєння змінних num, name, balance здійснюється в умовах структури while. Операція зчитування (вводу) із файлу base>> подібна операції вводу cin>> з клавіатури. Значення зчитаних змінних виводиться на екран. Структура while закінчує роботу при досягненні кінця файлу, з котрого вона зчитує дані.

РЕЗУЛЬТАТ ВИКОНАНННЯ ПРОГРАМИ

Дві описані програми (запису та зчитування) здійснюють послідовний доступ до файлу. Файли з послідовним доступом зручні для накопичування даних.

Можна скорегувати так програму зчитування, щоб вона здійснювала також деяку обробку даних.

ФАЙЛИ ДОВІЛЬНОГО ДОСТУПУ

У файлах довільного доступу дозволяється здійснювати запис та зчитування, починаючи з будь-якого місця (позиції) у файлі. Позиціонування проводиться функціями seekp для запису (seek – шукати, put – класти) та seekg - для зчитування (get – отримувати) з аргументом, який визначає номер позиції у байтах. Відлік від початку файлу задається за замовчуванням. Запис реалізує функція write (писати), зчитування – read (читати) – обидві з двома аргументами, які визначають змінну та її розміри у байтах.

filename. seekp (n); filename.write ((char*)&t, sizeof (t));

Визначають: встановити позицію для запису на n-ий байт від початку файлу filename та записати значення змінної t з розміром sizeof (t) байтов, починаючи від позиції n уперед.

filename. seekg (m); filename.read ((char*)&a sizeof (a));

Визначають: встановити позицію для зчитування на m-ий байт від початку файлу filename та присвоїти змінної а значення, що записано від позиції m на sizeof (a) позицій уперед.

Читання та запис завжди здійснюються уперед, починаючи з заданої позиції.

Для того щоб можна було орієнтуватися у структурі файлу та здійснювати позиціонування на початок будь якої вибраної змінної, потрібно знати, у якому порядку ці змінні записані у просторі відведеному для кожної з них. Для цього здійснюється попередня розмітка файлу. Програма, що здійснює розмітку, визначає структуру файлу. Нехай,окремі записи мають однакову довжину. Такий файл по суті з’ясовує: комірки заповнені або порожні. Запис,перезапис або вилучення даних в одній комірці не зачіпає інших.

Програма, що здійснює розмітку файлу base1.box для бази даних на 100 абонентів (100 комірок), записуються нулі на ділянки, які визначені для власного номера (int) та значення балансу (float), а також по 10 зірочок (11-й,

службовий, знак додає сам комп’ютер) на ділянці для імені клієнту.

Розглянемо програму 1_50.

/* файл PART1\FILE\1_50.cpp

Розмітка файлу довільного доступу*/

#include “c:\CPP\SUBPROG\\roll.h”

#include “c:\CPP\SUBPROG\\ roll_txt.h”

#include <fstream.h> //для роботи з файлами

#define FILE “base2.box”

main () { clrscr();

ofstream base(FILE); /* відкриття файлe для запису зі стиранням попередньої за замовчуванням */

if (! base) {cout<<”file error”;

pause(0);}; //перевірка відкриття файлу

cout<<“ розмітка файлу на 100 абонентів”<<end1;

num=0; //для номера застосовуємо глоб. змінну num

char name[ ]={“**********”};/*прізвище клієнта, 10 символів*/

float balance=o.00; //баланс

cout<<“ \nабонент №1\n”;

for (i=1; i<=100; i++) { //ввід порожніх значень

base.write ((char*)&num, sizeof(num));

base.write ((char*)&name, sizeof(name));

base.write ((char*)&balance, sizeof(balance));

If (i==1)cout<<num<<name<< balance;};

cout<<“\nкінець розмітки”;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: