Середа, 22.05.2024, 00:35
Вітаю Вас Гість | Реєстрація | Вхід

Інформатика в Білицькій ЗОШ І - ІІІ ступенів №1

Меню сайту
Вхід на сайт
Наше опитування
Оцініть мій сайт
1. Відмінно
2. Непогано
3. Добре
4. Погано
5. Жахливо
Всього відповідей: 8
Друзі сайту
  • Білицька ЗОШ №1
  • Мої Білики
  • Урок Delphi 7

     

    Робота з файлами в Delphi

      Класична робота з файлами в Delphi

     

    Технологія роботи з файлами в системі Delphi вимагає певного порядку дій:

    1. Перш за все файл повинен бути відкритий . Система стежить, щоб інші програми не заважали роботі з файлом . При цьому визначається, в якому режимі відкривається файл - для зміни або тільки зчитування інформації. Після відкриття файлу в програму повертається його ідентифікатор, який буде використовуватися для вказівки на цей файл у всіх процедурах обробки.
    2. Починається робота з файлом . Це можуть бути запис, зчитування, пошук і інші операції.
    3. Файл закривається. Тепер він знову доступний іншим додаткам без обмежень. Закриття файлу гарантує, що всі внесені зміни будуть збережені, так як для збільшення швидкості роботи змінні попередньо зберігаються в спеціальних буферах операційної системи.

    У Delphi реалізовано кілька способів роботи з файлами . Познайомимося з класичним способом, пов'язаним з використанням файлових змінних . Файлова змінна вводиться для вказівки на файл. Робиться це за допомогою ключового слова File : 

       var F   File ;

    Описана таким чином файлова змінна вважається Нетипізованою, і дозволяє працювати з файлами з невідомою структурою. Дані зчитуються і записуються побайтно блоками, розмір яких вказується при відкритті файлу, аж від 1 байта. 

    Але частіше використовуються файли, що складаються з послідовності однакових записів. Для опису такого файлу до попереднього опису додається вказівку типу записи: 

       var F   File of тип_запису ;

    Як типу можуть використовуватися базові типи, або створюватися свої. Важливо тільки, щоб для типу був точно відомий фіксований розмір в байтах, тому, наприклад, тип String в чистому вигляді застосовуватися не може, а тільки у вигляді String [N] , як вказувалося на уроці Delphi 5. 

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

     

    Для текстових файлів окремо зазначимо, що тип файлової змінної в цьому випадку TextFile , а тип звичайної - String . 

       Для відкриття файлу потрібно вказати, де він розташований. Для цього файлова змінна повинна бути асоційована з потрібним файлом, який визначається його адресою. Адреса файлу може бути абсолютрою, із зазначенням диска і каталогів ( 'C: \ Мої документи \ Мої малюнки \ FileName.ini'), або відносною, тоді він створюється в папці з .exe файлом програми. Для завдання відносного адреси досить вказати ім'я файлу з потрібним розширенням. Робиться це оператором AssignFile: 

       AssignFile (SaveF, 'C: \ Мої документи \ Мої малюнки \ FileName.ini'); 
       AssignFile (SaveF, 'FileName.ini'); 

    Тепер файл повинен бути відкритий. 
       Відкриття файлу оператором Rewrite призведе до відтворення файлу заново , тобто існуючий файл буде без попередження знищений, і на його місці буде створено новий порожній файл заданого типу, готовий до запису даних. Якщо ж файлу не було, то він буде створений. 
       Відкриття файлу оператором Reset відкриє існуючий файл для зчитування або запису даних, і його показник буде встановлений на початок файлу :

       Rewrite (SaveF); 
       Reset (SaveF); 

    Кожен з цих операторів може мати другий необов'язковий параметр, що має сенс для нетипізований файлів, і в якому зазначено довжину запису нетипізованого файлу в байтах: 

       Rewrite (SaveF, 1); 
       Reset (SaveF, 1); 

    Читання файлу проводиться оператором Read:

       Read (SaveF, SaveV); 

    Запис в файл виробляється оператором Write:

       Write (SaveF, SaveV); 

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

       if FileExists ( 'FileName.ini') 
          then Read (SaveF, SaveV); 

    Примусово встановити покажчик на потрібну запис можна оператором Seek (SaveF, N) , де N - номер потрібного запису, який, як і майже все в програмуванні, відраховується від нуля: 

       Seek (SaveF, 49); - Установка показника на 50-й запис. 

    При послідовному читанні з файлу рано чи пізно буде досягнуто кінець файлу, і при подальшому читанні відбудеться помилка. Перевірити, чи не досягнуто кінець файлу, можна оператором EOF (абревіатура End OFile), який дорівнює true , якщо прочитаний останній запис і покажчик знаходиться в кінці файлу: 

       while (not EOF (SaveF)) do
          Read (SaveF, SaveV ); 

     Для текстових файлів замість Read і Write використовуються оператори Readln і Writeln , які вміють визначати кінець рядка.

    Оператор Truncate (SaveF) дозволяє відсікти (стерти або, якщо хочете, видалити!) всі записи файлу, починаючи від поточної позиції вказівника, і до кінця файлу. 

    Наприкінці роботи з файлом його необхідно закрити. Це робиться оператором CloseFile (SaveF);

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

      Створюємо обробник події Форми OnCreate наступного змісту: 

    procedure TForm1.FormCreate (Sender: TObject); 
    begin
       AssignFile (SaveF, 'Init.ini'); 
       if FileExists ( 'Init.ini') then 
          begin
             Reset (SaveF); 
             Read (SaveF, SaveV); 
             Form1.Left: = SaveV.X; 
             Form1.Top: = SaveV.Y; 
            Form1.Caption: = SaveV.Caption; // Наші змінні додатково зберігають заголовок Форми! 
          End; 
    end;

    Тепер необхідно створити обробник події OnClose: 

    procedure TForm1.FormClose (Sender: TObject; var Action: TCloseAction); 
    begin
       Rewrite (SaveF); // Не треба перевіряти наявність файлу, створимо його заново! 
       SaveV.X: = Form1.Left; 
       SaveV.Y: = Form1.Top; 
       SaveV.Caption: = Form1.Caption; 
       Write (SaveF, SaveV); 
       CloseFile (SaveF) ; 
    end;

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