Текстові файли в delphi, delphi, компоненти delphi, вихідні коди delphi

Текстові файли в Delphi

А ти пиши мені листи дрібним почерком, оскільки місця мало в рюкзаку.

Романтичне створення листів при тремтячому полум'я свічки, на жаль, безповоротно пішло в минуле. І хоча деякі креативні прихильники епістолярного стилю упираються в невігластві і довіряють свої невиразні думки папері, остання зараз в основному використовується за своїм прямим призначенням, тобто для складання фігурок орігамі та видання плакатів, що закликають берегти зеленого друга (яким для нас є ліс, а не крокодил Гена і не п'яний товариш).

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

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

Текстові файли в delphi, delphi, компоненти delphi, вихідні коди delphi

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

І ось ми бачимо: всі символи рядка записані без будь-яких змін, але в кінці рядка знаходяться відразу 2 символи - $ 0D і $ 0A (або те ж саме в більш звичному десятковому вигляді - # 13 і # 10). Вони ще в стародавні часи позначали повернення каретки принтера і перехід на новий рядок. Цей анахронізм зберігся до сих пір в текстових файлах, які нічого і не знають про принтерах.

Нам залишилося дізнатися, як же записуються рядки таким химерним чином, тому розглянемо основні операції з текстовими файлами - збереження їх на диску і завантаження в додаток. Вони не принесуть вам клопоту, якщо ви будете точно слідувати «рецептом».

Незалежно від того, зберігаємо ми файл або завантажуємо його, перш за все потрібно оголосити файлову змінну типу TextFile:

Її прийнято позначати буквою F (від слова File, файл), але це необов'язково. Саме ця змінна і буде псевдонімом реального файлу.

Потім потрібно зв'язати файлову змінну з ім'ям файлу, скориставшись процедурою

Її легше зрозуміти на конкретному прикладі.

Ось так можна зв'язати нашу файлову змінну з файлом «osh_frc_v.txt» (так як шлях до файлу не вказано, то файл повинен знаходитися в тій же папці, що і сам додаток!).

Тепер можна відкрити файл для читання або запису.

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

procedure Reset (var F: file); (В нашому прикладі - Reset (F);), і можна завантажувати дані. Вони будуть зчитуватися, починаючи з першого рядка.

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

Щоб зберегти дані в файлі, скористаємося процедурою

procedure Rewrite (var F: file); (В нашому прикладі - Rewrite (F);)

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

function Append (var F: Text): Integer; (В нашому прикладі - Append (F);)

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

4. Для запису даних в файл служать процедури

procedure Write (var F: file [; P1 ;.; Pn]);

procedure Writeln (var F: file [; P1 ;.; Pn]);

У квадратних дужках записані необов'язкові параметри, які є виразами наступних типів: char, string, PChar, integer, real, boolean. Таким чином, в текстовий файл можна записувати не тільки символи, слова, рядки, а й числа (при записі виразів логічного типу в файл виводяться слова TRUE і FALSE). Кількість виразів в списку виведення може бути будь-яким.

Якщо в одному рядку файлу процедурою Write зберігаються дані різних типів, то вони будуть записані один за одним без пробілів та інших роздільників. Процедура Writeln робить те ж саме, але потім закриває рядок в файлі (додає в кінець рядка символи $ 0D $ 0A).

Запише рядок в лапках (але без лапок!). Або те ж саме:

Ви також можете змішувати константи і змінні:

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

Тоді на диску з'явиться рядок:

А ти пиши мені листи дрібним почерком!

Всі числа при записи в файл повинні відділятися один від одного, по крайней мере, одним пропуском, знаком табуляції або кодами кінця рядка.

Процедура тільки з одним параметром - Writeln (F) - просто завершує рядок, нічого в неї не записуючи.

Процедури Writeln і Write починають записувати дані з першого рядка файлу, потім Writeln (!) Послідовно переходить до другої рядку, третьої - і так далі до кінця файлу. З їх допомогою можна зберегти дані в довільній рядку файлу, але можна записати потрібну кількість порожніх рядків процедурою Writeln (F), а вже потім записати потрібний рядок.

Для читання даних з текстового файлу є процедури:

У квадратних дужках записані необов'язкові параметри, які є змінними наступних типів: char, string, integer, real, PChar. Кількість змінних в списку введення може бути будь-яким.

Ми частіше будемо використовувати другу процедуру (Readln) - щоб вважати цілком весь рядок в зазначену строкову змінну:

Якщо в одному рядку записані дані інших типів через пробіл, наприклад, «123 321 TRUE», то їх можна вважати так:

В результаті виконання цієї операції значенням цілої змінної n буде число 123, цілої змінної m - число 321, строкової змінної s - рядок 'TRUE' (не можна вважати значення в логічну змінну!).

Не забувайте стежити за відповідністю типів змінних і зчитувальних даних, інакше виникне помилка!

Якщо процедура Readln зчитує тільки якісь дані з рядка (в списку введення менше змінних, ніж в рядку), то решта рядка буде пропущена.

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

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

При введенні символу з файлу в змінну типу char Новомосковскется тільки 1 символ, в тому числі і коди кінця рядка.

Процедури Read і Readln починають зчитувати дані з першого рядка файлу, потім Readln (!) Послідовно переходить до вто-рій рядку, третьої - і так далі до кінця файлу. З їх допомогою можна вважати дані з довільною рядки файлу, але можна припустити потрібне число рядків процедурою Readln (F), а вже потім вважати потрібний рядок.

5. Після завершення операцій з файлом він повинен бути закритий процедурою:

procedure CloseFile (var F: file); (в нашому прикладі - CloseFile (F);)

Допоможи проекту! Розкажи друзям про цей сайт:

Схожі статті