ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

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

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

    Intro

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

    Step by step

    Step 1 - Обьявление файлової змінної

    Файлова мінлива в загальному вигляді оголошує у роздiлi 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 i: = 0 to Memo1.Lines.Count do

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

    CloseFile (F);

    end;

    Це кнопка буде зберігати текстовий файл. Отже, в розділі var я оголосив три локальні змінні: F типу TextFile це і є файлова змінна для текстових файлів; FileName типу String буде служити для зберігання імені файлу; І i типу 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.

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

    Для підготовки даної роботи були використані матеріали з сайту http://www.soch.imperium.by

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status