Зчитання даних з файлу

Читання з файлу виконується за допомогою інструкцій read і readln, які в загальному вигляді записуються таким чином:

read( Файлова змінна, Список змінних);

readln( Файлова змінна, Список змінних);

де:

· Файлова змінна — змінна типуTextFile;

· Список змінних — імена змінних, розділені комами.

 

Зчитування чисел

Слід розуміти, що в текстовому файлі знаходяться не числа, а їх зображення. Дія, що виконується інструкціями read або readln, фактично складається з двох частин: спочатку з файлу читаються символи до появи роздільника (пропуску або кінця рядка), потім прочитані символи, числа, що є зображенням, перетворяться в число, і набутого значення привласнюється змінною, ім'я якої вказане як параметр інструкції read або readln.

Наприклад, якщо текстовий файл а:\data. txt містить наступні рядки:

23 15 45 28 56 71

то в результаті виконання інструкцій:

AssignFile(f, 'a:\data.txt');

Reset(f); // відкрити для читання

Read(f, а); read(f, b, c); read(f, d);

значення змінних будуть наступними: а = 23, b = 15, з = 45, d = 28.

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

Тому в результаті виконання інструкцій

AssignFile(f,'a:\data.txt');

Reset(f);

Readln(f, а);

Readln(f, b, c);

Readln(f, d);

значення змінних будуть наступними: а = 23, b = 45, з = 28, d = 56.

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

 

Зчитування стрічок

У програмі стрічкова змінна може бути оголошена з вказівкою довжини або без неї.

Наприклад:

strichka1:string[10];

strichka2:string;

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

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

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

Наприклад, текстовий файл f- reads.txt містить рядки:

Петрова Маша Васильев Антон Цой Лариса

У табл. 6.1 приведено декілька варіантів оголошення змінних, інструкції читання з файлу freinds.txt і значення змінних після виконання інструкцій читання.

Таблиця 6.1.Приклади читання рядків з файлу

         
  Оголошення Інструкція зчитування змінних з файлу Значення змінних після зчитування з файлу  
  fnam: string[15] Readln (f, fnam, name) fnam= ' Петрова’  
  name: string[10]   name= ' Маша  
  fnam, name: string; Readln (f, fnam, name) fam= ' Петрова Маша '  
      name= ' '  
  drug: string[80] Readln (f, drug) drug =' Петрова Маша'  
             

6.9. Мітка кінця файлу

Хай на диску є деякий текстовий файл. Потрібно в діалогове вікно вивести вміст цього файлу. Рішення задачі задоволене очевидно: треба відкрити файл, прочитати перший рядок, потім другий, третій і так далі до тих пір, поки не буде досягнутий кінець файлу. Але як визначити, що прочитаний останній рядок, досягнутий кінець файлу?

Для визначення кінця файлу можна скористатися функцією EOF (End of File — кінець файлу). У функції EOF один параметр — файлова змінна. Значення функції EOF рівне False, якщо прочитаний елемент даних не є останнім у файлі, тобто можливе подальше читання. Якщо прочитаний елемент даних є останнім, то значення EOF рівне True.

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

У лістингу 6.5 приведена процедура, яка виконує поставлене завдання. Вона читає рядки з файлу, ім'я якого ввів користувач під час роботи програми, і виводить ці рядки в полі Memo. Вікно програми приведене на мал. 6.6.

Рис. 6.6.Вікно програми Зчитування з файлу

Лістинг 6.5. Читання з файлу

unit rd_;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes

Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

Type

TForm1 = class(TForm)

Button2: TButton;

Edit1: TEdit;

Memo1: TMemo;

Button1: TButton;

procedure Button2Click(Sender: TObject);

procedure ButtonlClick(Sender: TObject); private

{ Private declarations ) public

{ Public declarations } end;

Var

Form1: Tform1;

Implementation

{$R *.dfm}

// клацання на кнопці Відкрити

procedure TForm1.Button1Click(Sender: TObject);

var

f: TextFile; // файл

fName: String[80]; // ім'я файлу

buf: String[80]; // буфер для читання з файлу

Begin

fName := Edit1.Text;

AssignFile(f, fName);

{$I-}

Reset(f); // відкрити для читання

{$I+}

if IOResult<> 0 then

Begin

MessageDlg('Помилка доступу до файлу ' + fName mtError,[mbOk],0);

exit;

end;

// читання з файлу

while not EOF(f) do begin

readln(f, buf); // прочитати рядок з файлу

Memo1.Lines.Add(buf); // додати рядок в полі Memo1

End;

CloseFile(f); // закрити файл

End;

// клацання на кнопці Зберегти — запис у файл

procedure Tform1.Button2Click(Sender: TObject);

Var

f: TextFile; // файл

fName: String[80]; // ім'я файлу

i: integer;

Begin

fName := Edit1.Text; AssignFile(f, fName);

Rewrite(f); // відкрити для перезапису

// запис у файл

for i:=0 to Memo1.Lines.Count do // рядки нумеруються з нуля

writeln(f, Memo1.Lines[i]);

CloseFile(f); // закрити файл

MessageDlg('Дані записані у файл ', mtlnformation,[mbOk],0);

End;

End.

Для організації обробки файлу використана інструкція циклу while, яка забезпечує перевірку значення функції EOF перед кожним читанням, у тому числі і перед першим.

Наявність кнопки Зберегтиі відповідної нею процедури дозволяє зберегти вміст поля Memo у файлі, тобто програма читання з файлу є примітивний редактор тексту.

Додавання чергового прочитаного з файлу рядка в полі Memo виконується застосуванням методу Add до властивості Lines.


 

 








Дата добавления: 2015-12-01; просмотров: 816;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.023 сек.