Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт_1.doc
Скачиваний:
2
Добавлен:
06.05.2019
Размер:
299.52 Кб
Скачать

Міністерство освіти і науки, молоді та спорту України

Національний університет «Львівська політехніка»

Кафедра САПР

ЗВІТ

про виконання лабораторної роботи №1

на тему: «Послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях»

з курсу: «Організація баз даних і знань»

Виконав: ст. гр. КН-24

Гурський А.І.

Прийняв:

Головацький Р.І.

Львів 2012

Тема роботи

Послідовний метод доступу до файлів на зовнішніх запам’ятовуючих пристроях

Мета роботи

Розглянути органiзацiю i ведення файлiв послiдовного доступу; набути практичнi навички у програмуваннi алгоритмiв роботи з файлами послiдовного доступу.

Лабораторне завдання

Тема завдання: Спортивнi болiди

1. Написати програму, яка реалізує такі функції:

1.1. Створення файлу бази даних.

1.2. Друк бази даних.

1.3. Читання запису за введеним ключем.

1.4. Пошук запису за введеним ключем.

1.5. Вставлення запису.

1.6. Видалення запису за введеним ключем.

1.7. Модифікація запису.

2. Оптимізувати розроблену програму введення файлу бази даних шляхом створення файлу групової обробки повідомлень з яким допустимі такі операції:

2.1. Створення файлу повідомлень.

2.2. Друк файлу повідомлень.

2.3. Пошук запису за введеним ключем.

2.4. Видалення запису за введеним ключем.

2.5. Вставлення запису.

2.6. Модифікація запису.

Короткі теоретичні відомості

Структури

Структура - це набір з однієї або більше змінних, можливо різних типів, згрупованих під одним ім'ям для зручності обробки. (У деяких мовах, наприклад Паскаль, структури називаються “записами”).

Розглянемо приклад. Уявіть собі, що на календарі сьогодні 1 січня 2009 року. Дата складається з складових таких, як день, рік та назва місяця. Ці три змінні можна об’єднати в одну структуру вигляду:

struct DATE {

int day;

int year;

char mon_name[4];

};

Опис структури, що складається з взятого в фігурні дужки списку полів, починається з ключового слова struct. Після слова struct пишеться ім'я, так звана Мітка структури (тут це DATE). Ім’я може бути відсутнє. Така мітка іменує структури цього виду і може використовуватися надалі як скорочений запис детального опису. Елементи або змінні, згадані в структурі, називаються членами (полями, компонентами). Мітки і члени структур можуть мати такі ж імена, що і звичайні змінні (тобто ті, що не є членами структур), оскільки їх імена завжди можна розрізнити по контексту. Звичайно однакові імена присвоюють тільки тісно пов'язаним об'єктам.

Точно так само, як у разі будь-якого іншого базового типу, за правою фігурною дужкою, що закриває список членів, може записуватись список змінних.

Оператор

struct { } x, y, z; // описує struct { }

синтаксично аналогічний

Int X, y, z; // описує int

в тому сенсі, що кожен з операторів описує x, y та z в якості змінних відповідних типів і приводить до виділення для них пам’яті.

Ініціалізація структур

При визначенні структурних змінних можна ініціалізувати їхні поля. Ця можливість подібна ініціалізації масиву й слідує тим же правилам:

ім'я_шаблона ім'я_змінної_структури = {значення1., значення2, . . .};

Компілятор присвоює значення1 першій змінній в структурі, значення2 - другій змінній й т.д., і тут необхідно додержуватися деяких правил:

1. Значення, що присвоюються, повинні співпадати по типу з відповідними полями структури;

2. Можна оголошувати кількість значень, що присвоюються, меншу, ніж кілкість полів. Компілятор присвоїть нулі іншим полям структури;

3. Список ініціалізації послідовно присвоює значення полям структури, вкладених структур і масивів.

Файли, та робота з ними

Файл — це іменований об'єкт, що зберігає дані (програма або будь-яка інша інформація) на якому-небудь носії (дискета, вінчестер, CD). Файл, як і масив, - це сукупність даних, тому вони трохи схожі. Однак, вони мають також істотні розбіжності:

  1. Файли, на відміну від масивів, розташовуються не в оперативній пам'яті, а на жорстких дисках або на зовнішніх носіях, хоча файл може розташовуватися на так званому електронному диску (в оперативній пам'яті);

  2. Файл не має фіксованої довжини, тобто може збільшуватися й зменшуватися;

  3. Перед роботою з файлом його необхідно відкрити, а після роботи - закрити.

Говорячи про файли, слід сказати про файлову систему.

Файлова система - це сукупність файлів і керуючої інформації на диску для доступу до файлів. Або по-іншому - це сукупність програмних засобів для доступу до файлів. Існує досить багато файлових систем, ми будемо говорити про одну з них - про файлову систему MS-DOS.

У файловій системі MS-DOS імена файлів складаються із двох частин, розділених крапкою: ім'я файлу й розширення. Поле ім'я файлу може містити не більше 8 довільних символів з набору дозволених для використання в імені файлу. Поле ж розширення може містити не більше 3 символів з того ж набору. Розширення звичайно вказує на тип збереженої інформації або на структуру файлу, і може взагалі бути відсутнім. Приклади найпоширеніших розширень: exe, com, bat, txt, doc, mp3, htm і ін.

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

Розрізняють два види файлів: текстові й бінарні.

Текстові файли можуть бути переглянуті й відредаговані із клавіатури будь-яким текстовим редактором і мають дуже просту структуру: послідовність ASCII-символів. Ця послідовність символів розбивається на рядки, кожна з яких закінчується двома кодами: 13, 10 (0xD, 0хА). Приклади відомих текстових файлів: *.bat, *.c, *.asm.

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

Бібліотека мови С містить функції для роботи як з текстовими, так і з бінарними файлами.

Файлова система С спроектована для роботи з великою кількістью пристроїв: моніторами, дисководами, CD-ROM, принтерами, тощо. Незважаючи на те, що кожний з цих пристроїв має свої особливості, файлова система С трансформує їх в логічний пристрій. Таку абстракцію називають потоком.

Всі потоки однакові за поведінкою, але аналогічно до файлів, розрізняють два типи потоків - бінарні і текстові. Текстовий потік - послідовність ASCII-символів, бінарний - послідовність байтів.

Потік асоціюється з певним файлом при його відкритті. Коли файл є відкритим, між ним і вашою програмою можливий обмін інформацією. Далі наведено декілька функцій для роботи з файлами:

fopen() відкриває потік

fclose() закриває потік

fprintf() запис у файл

fscanf() читання з файлу

feof() повертає істинне значення, якщо досягнуто кінець файлу

remove() знищує файл

Відкриття файлу

Функція відкриття файлу fopen ( ) має два параметри, обоє є стрічковими літералами.

FILE *fopen (char *filename, char *mode);

Перший — задає фізичне місцезнаходження (шлях) і ім'я файлу, що відкривається, а другий - тип доступу до файлу, що може приймати наступні значення:

"г"

Відкрити файл для читання

"w"

Відкрити файл для запису. Якщо файл існує, то його вміст губиться

"а"

Відкрити файл для запису в кінець файлу. Якщо файл не існує, то він створюється

"г+"

Відкрити файл для читання й запису. Файл повинен існувати

"w+"

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

"а+"

Відкрити файл для читання й запису в кінець файлу. Якщо файл не існує, то він створюється

До комбінацій перерахованих вище літералів можуть бути додані також “t” або “b”:

“t”

Відкрити файл у текстовому режимі

“b”

Відкрити файл у бінарному режимі

Можливі наступні режими доступу: "w+b", "wb+", "rw+", "w+t", "rt+" і ін.

Якщо режим не зазначений, то файл відкривається в текстовому режимі.

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

FILE *fp; /* вказівник на файл */

fp=fopen(“test”, “w”); /*відкриття файлу для записування */

Тут “w” означає writing - запис. Для читання з файлу потрібно використовувати атрибут “r”- reading - читання.

Закриття файлу

Після роботи з файлом він повинен бути закритий функцією fclose (). Для цього необхідно в зазначену функцію передати покажчик на FILE, що був отриманий при відкритті функцією fopen (). У процесі завершення програми незакриті файли автоматично закриваються системою.

Отже файл, відкритий у попередньому прикладі, можна закрити так:

fclose (fp);

Читання/запис у файл

Для роботи з текстовими файлами в бібліотеці мови С є низка зручних функцій, ми розглянемо найпоширеніші: fprintf ( ), fscanf ( ), fgets ( ), fputs ( ). Формат параметрів-цих функцій дуже схожий на формат знайомих вам функцій printf ( ), scanf ( ), gets ( ) і puts ( ). Схожі не тільки параметри, але й дії. Відмінність складається лише в тім, що printf ( ), scanf ( ) і інші працюють за замовчуванням з консоллю (екран, клавіатура), a fprintf ( ), fscanf ( ) - з файлами (у тому числі й зі стандартними потоками stdin, stdout і ін.), тому в них доданий параметр, що є покажчиком на структуру FILE, що була розглянута вище.

Функції fscanf() та fprintf()

Якщо вивчити вміст файлу, створеного цією програмою, то видно, що дані в ньому розташовуються так само, як розташовувалися б на екрані, якби використовувалася функція printf ( ).

Функції для роботи з текстовими файлами зручно використовувати при створенні текстових файлів, веденні файлів-протоколів (log-файлів) і т. п. Але при створенні баз даних доцільно використовувати функції для роботи з бінарними файлами: fwrite ( ) і fread ( ). Ці функції без яких-небудь змін копіюють блок даних з оперативної пам'яті у файл і, відповідно, з файлу – в пам’ять. Такий спосіб обміну даними вимагає менше часу:

unsigned freed (void *ptr, unsigned size, unsigned n, FILE *stream);

unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE*stream);

де:

*ptr - вказівник на буфер;

size - розмір блоку;

n - кількість блоків;

*stream - вказівник на структуру FILE відкритого файлу.

Першим параметром передається вказівник на буфер, у який будуть поміщені дані з файлу функцією fread ( ) або з якого дані будуть прочитані у файл функцією rwrite ( ). Наступні два параметри задають розмір блоку і відповідно, кількість блоків, що читаються/записуються. Останній параметр - вказівник на структуру FILE.

Важливо зрозуміти, що немає однозначного методу, який можна було б використовувати для відмінності текстового файлу від бінарного, тому будь-який бінарний файл може бути відкритий для роботи з ним як з текстовим; а текстовий може бути відкритий як бінарний. Але такий варіант роботи з файлом звичайно приводить до помилок. Тому рекомендується працювати з конкретним файлом у тім режимі, у якому він був створений.

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

Функція feof ( ) повертає істинне значення у випадку досягнення кінця файлу, і нуль - в протилежному випадку. Наприклад у попередньому прикладі операція зчитування з файлу може виглядати наступним чином:

i = 0;

while( !feof(my_file))

fscanf(my_file, “%d ”, &x[i++]);

...

Більш повну інформацію про роботу з файловою системою С Ви зможете знайти в наведеній літературі або контекстній допомозі.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]