Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Работа з файлам в Дельфі

РефератДопомога в написанніДізнатися вартістьмоєї роботи

I/O — це операції ввода/вывода (input/output). Тут ми розглянемо запис даних в файл і читання цих даних. Спочатку запис. Записати в файл можна зміну чи константу того типу, якого було обьявлен файл. Наприклад якщо файл був обьявлен отако F: File of Integer, то неї буде записати дані лише типу Integer. При спробі записати дані іншого типу компілятор видасть повідомлення про помилку. Запис в файл… Читати ще >

Работа з файлам в Дельфі (реферат, курсова, диплом, контрольна)

Работа з файлам в Дельфі

Эта стаття орієнтована на новачків, які прагнуть навчитися працювати з файлами в дельфи. У статті розглядаються стандартні I/O операції з файлами, типові помилки та їх предотвращения.

Intro.

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

Step by step.

Step 1 — Обьявление файловій переменной Файловая змінна загалом оголошують розділ var приблизно так:

F: file of Type;

Например:

F: File of integer;

Следует помітити, що текстові файли обьявляются трохи за другому:

F: TextFile;

Да і взагалі текстові файли «особливі «. Деякі функції працюють тільки з текстовими файлами. Можна обьявить як файл цілих чисел (integer), текстовий файл чи файл якого або іншого типу, а й файл власного типу чи записи, помістивши обьявление типу чи записи вище обьявления файловій перемінної. Например:

type.

TDay = (MON, TUE, WED, THU, FRI, SAT, SUN);

var.

F: File of TDay;

или:

type.

TDay = record.

Num: Integer;

Name: String[200];

end;

var.

F: File of TDay;

Следует звернути увагу, що довжина строковых полів у запису мусить бути чітко визначено (Name: String[200]).

Step 2 — Призначення і «відкриття файла После обьявления файловою перемінної потрібно зв’язати її з фізичною файлом на диску. Зробити це можна зробити з допомогою процедури AssignFile:

AssignFile (var F: File; FileName: String);

Например:

var F: TextFile;

begin.

AssignFile (F, «text.txt »);

После виконання процедури файлова змінна F буде з файлом text. txt, які у папці з програмою. І всі дії, вироблені з перемінної діятимуть саме у цей файл. Проте зміну можна звільнити для використання з іншим файлом процедурою CloseFile, але це нижче. Тепер потрібно відкрити файл, причому однією з кількох способів, в залежність від ваших потреб. Створити новий чи перезаписати існуючий можна з допомогою процедури Rewrite (F). Відкрити для запис у кінець файла з допомогою процедури Append (F). А відкриття файла для читання здійснює процедура Reset.

Step 3 — Стандартні I/O опреации з файлами.

I/O — це операції ввода/вывода (input/output). Тут ми розглянемо запис даних в файл і читання цих даних. Спочатку запис. Записати в файл можна зміну чи константу того типу, якого було обьявлен файл. Наприклад якщо файл був обьявлен отако F: File of Integer, то неї буде записати дані лише типу Integer. При спробі записати дані іншого типу компілятор видасть повідомлення про помилку. Запис в файл здійснюється процедурами Write ([var F: File]; P1; […, Pn]) і WriteLn ([var F: File]; P1; […, Pn]). Друга відрізняється з першої тим, що вона після записи параметра перемащает каретку нові рядок, тобто. наступний параметр запишеться новому рядку. Ось приклад використання процедур:

var F: TextFile;

Str: String;

Str := «Some Text » ;

WriteLn (F, Str);

Write (F, «це завжди буде новому стоці «);

write (F, «але це в цій самій рядку »);

Чтение даних відбувається благодоря процедурам Read ([var F: File]; V1; […, Vn]) і ReadLn ([var F: File]; V1; […, Vn]). Отличиаются вони тим, що відбулося після прочитання параметра процедурою ReadLn каретка переміщається нові рядок, навіть якщо ще були дані. Ось пример:

var F: TextFile;

Str: String;

Str2: String;

Str3: String;

Read (F, Str);

ReadLn (F, Str2);//str2 міститиме дані, що йдуть після str.

Read (F, Str3);//str3 міститиме дані, що перебувають у нової рядку після str2.

Думаю в усіх так сложно.

Step 4 — Закриття файла Файловую зміну після використання потрібно обьязательно звільнити, інакше програма не зачиниться, й видаватиме помилку. Також звільнення файлової перемінної буде корисно тоді, коли ви повинні працювати з кількома файлами послідовно, і після роботи з цим файлом можна звільнити зміну і зв’язати її з новими файлом. Звільнення файлової перменной робить процедура CloseFile (F: File). Прикладу гадаю зайве, т.к. ніяких особливостей в неї нет.

Пример Я гадаю новачку усе-таки важко буде без прикладів дати раду працювати з файлами. Тож расмотрим найпростіший приклад програми, котра, за натискання однієї кнопки буде вимагати ім'я файла у користувача і записувати вміст TMemo. По натискання інший кнопки програма знов-таки буде вимагати ім'я файла, читати від туди записані дані і поміщати в TMemo. Знаю, що поставив запис і читання в TMemo то можна організувати з допомогою спеціальних методів. Але це лише приклад до статті. Вобщем кидайте на форму одну TMemo і ще дві кнопки. Оброблювач першої кнопки приведіть до такого виду:

procedure TForm1. Button1Click (Sender: TObject);

var.

F: TextFile;

FileName: String;

i: Integer;

begin.

FileName := InputBox («Ім'я файла », «Запровадьте ім'я файла », «default.txt »);

AssignFile (F, FileName);

Rewrite (F);

for і := 0 to Memo1.Lines.Count do.

WriteLn (F, Memo1. Lines[i]);

CloseFile (F);

end;

Это кнопка зберігатиме текстовий файл. Отже, розділ var я обьявил три локальні перемінні: F типу TextFile і є файлова змінна для текстових файлів; FileName типу String служитиме для зберігання імені файла; І і типу Integer — для циклів. У першій рядку я запитую у користувача ім'я файла. У другій я пов’язую файлову зміну з фізичною файлом на диску. Рядок Rewrite (F) створює новий файл чи перезаписывает існуючий. ЧТо б дані не замінялися, а додавалися насамкінець файла цю рядок потрібно замінити на Append (F). Далі йде цикл з 0 до кількості всіх рядків Memo1. У циклі вміст все рядків Memo1 усе своєю чергою записується в файл. Зверніть увагу, що використовую WriteLn для записи нової рядки. Якби використовував Write, то ми все рядки Memo1 в файлі перетворилися на одну.

Обработчик другий кнопки повинен бути приблизно так:

procedure TForm1. Button2Click (Sender: TObject);

var.

F: TextFile;

FileName, tmp: String;

begin.

FileName := InputBox («Ім'я файла », «Запровадьте ім'я файла », «default.txt »);

AssignFile (F, FileName);

Reset (F);

while not EOF (f) do.

begin.

ReadLn (F, tmp);

Memo1.Lines.Add (tmp);

end;

CloseFile (F);

end;

Назначение локальних змінних у цій процедурі аналогічні предудыщим. Перша й друга рядок аналогічні рядками з оброблювача першої кнопки. Reset (F) — це відкриваю файл для читання процедурою Reset. Далі запускається цикл з усього файлу (while not EOF (F) do). Функція EOF (F: File) повертає true коли досягнуть кінець файла. У циклі читається одна рядок з файла в зміну tmp й додають в Memo1. От і всі, гадаю досить просто. Проте програму легко обдурити і може викликати виняток. Наприклад під час читання файла користувач може поставити ім'я неіснуючого файла. Тоді виникне помилка. Далі поговоримо про засобах захисту програми від исключений Способ 1 — Простейший Конечно найпростіший, але досить ефективний засіб захисту то можна організувати з допомогою вкладених блоків try — except і try — finally. Ви знаєте, що й при виконанні інструкції у тілі блоку try — except відбувається виняток, то виконання подальших інструкцій зупиняється і виконується те, що перебуває між except — end. Але якщо виникло виняток, а далі перебуває CloseFile (F), ця процедура не виконується і яскрава програма зможе коректно працюватимете, і завершитися. Вирішення проблеми — використання вкладених try — except і try — finally. Ось пример

var.

F: TextFile;

S: String;

begin.

try.

try.

Reset (F);

ReadLn (F, S);

except.

MessageDlg («Помилка роботи з файлом », mtError, [mbOk], 0);

end;

finally.

CloseFile (F);

end;

Но цей спосіб може спрацювати, якщо спроба відкриття неіснуючого файла (виникне искючение і під час CloseFile (F)).

Способ 2 — Эффективный Известно, що ваша програма сама перебирає обробку винятків. Але вона завжди робить це так. Тому найкращим рішенням було б самому проконтролювати момент відкриття файла. Треба лише спочатку відключити автоматичну обробку винятків директивою {I-}. А включити ж личить отак: {I+}. Потім звіритися зі значенням функції IOResult. При успішному відкритті файла вона повертає 0. Ось пример:

{I-}.

Reset (F);

{I+}.

if IOResult0 then.

begin.

MessageDlg («Файл «+PChar (FileName)+ «неіснує «, mtError, [mbOk], 0);

EXIT; //продовжувати нельзя.

end;

Все це вставте в процедуру читання файла (в прикладі вище) замість рядки Reset (F). Також можна застрахуватися від збоїв вставивши цю конструкцію в процедуру збереження файла замість рядки Rewrite.

Список литературы

Для підготовки даної роботи було використані матеріали із російського сайту internet.

Показати весь текст
Заповнити форму поточною роботою