Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - Основи програмування і алгоритмічні мови.DOC
Скачиваний:
28
Добавлен:
02.05.2014
Размер:
512.11 Кб
Скачать

5 Лабораторна робота №5 Файли у мові Pascal

5.1 Стислі теоретичні відомості

Файлова система, яка реалізується у Borland Pascal, складається з логічних та фізичних файлів.

Логічний файл – це змінна файлового типу, яка визначається у мові та використовується як засіб спілкування з фізичним файлом. Ім’я фізичного файлу використовується у програмі один раз під час зв’язку (Assign) його з логічним файлом. У якості фізичних файлів виступають власне файли на диску або пристрою MS-DOS (con, lpt, prn, com, aux, nul).

Ввід-вивід даних виконується через буфер – спеціальну область пам’яті. Механізм буферізації дозволяє швидко та ефективно обмінюватись інформацією з різними пристроями.

Borland Pascal підтримує три файлових типи:

  • текстові файли (типа Text);

  • компонентні файли (типа File Оf …);

  • безтипові файли (типа File).

Текстові файли – це файли, які складаються із кодів ASCII, організовані по рядкам та містять спеціальний код – кінець файлу.

Компонентні файли – файли, які складаються із машинних представлень різних даних. За допомогою цих файлів можна здійснювати обмін даними між дисками та робочою пам’яттю програми.

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

Для всіх без виключення файлів необхідно попередній зв’язок їх логічних позначень (файлових змінних) з фізичними файлами, наприклад:

Var

f1:Text;

f2:File of Real;

f3:File;

BEGIN

Assign(f1,‘D:\PROGS\file.txt’); { зв’язок f1 з file.txt }

Assign(f2,‘C:\file.dat’); { зв’язок f2 з file.dat }

Assign(f3,‘file.scn’); { зв’язок f3 з file.scn }

. . .

END.

Файлові змінні не можуть приймати участь в операторах привласнення. При їх використовуванні у якості формальних параметрів заголовків процедур та функцій вони завжди повинні бути описані як Var-параметри.

Після завершення роботи з файлом його обов’язково необхідно закрити (Close).

Загальні процедури та функції для роботи з файлами приведені нижче:

Assign(Var f;FileName:String)

– зв’язує файлову змінну f з фізичним файлом FileName;

Reset(Var f)

– відкриває файл з логічним ім’ям f для читання;

ReWrite(Var f)

– відкриває файл з логічним ім’ям f для запису;

Close(Var f)

– закриває канал вводу-виводу файла з логічним ім’ям f;

ReName(Var f;NewName:String)

– перейменовує фізичний файл, раніше зв’язаний з логічним f, в ім’я NewName. Застосована до закритих файлів;

Erase(Var f)

– витирає (якщо це можливо) фізичний файл, зв’язаний з логічним f, з носія інформації. Застосована до закритих файлів;

EOF(Var f):Boolean

– повертає True, якщо досягнуто кінець файлу f. Інакше повертає – False.

Для роботи тільки з текстовими файлами вводяться текст-орієнтовані процедури та функції:

SetTextBuf(Var f:Text;

Var Buf[;BufSize:Word])

– встановлює буфер файла f розміром BufSize байт. Буфер міститься в змінній Buf. Виконується перед відкриттям файлу f. Розмір буферу передачі даних по замовчанню дорівнює 128 байт;

Append(Var f:Text)

– відкриває файл f для дозапису у кінець файлу;

Flush(Var f:Text)

– виводить зміст буферу файла f у фізичний файл, не чекаючи повного заповнення буферу;

EOLn(Var f:Text):Boolean

– повертає True, якщо поточна позиція у файлі f – кінець рядка або кінець файлу. Інакше повертає значення – False;

SeekEOLn(Var f:Text):Boolean

– повертає True, якщо досягається кінець рядка або кінець файлу f (не звертаючи уваги на пробіли, табуляцію перед кінцем файлу);

SeekEOF(Var f:Text):Boolean

– повертає True, якщо досягається кінець файлу f (не звертаючи уваги на пробіли, табуляцію, признаки кінця рядків перед кінцем файлу);

Read(Var f:Text;<список ввода>)

– читання інформації з файлу f;

ReadLn(Var f:Text;<список ввода>)

– читання інформації з файлу f рядками;

Write(Var f:Text;<список ввода>)

– запис інформації у файл f ;

WriteLn(Var f:Text;<список ввода>)

– теж саме, але запис здійснюється рядками.

Типізований, або компонентний файл – файл з наборами даних однієї і тієї ж структури типу File of ТипКомпонента, де компонента може мати будь-який тип (у тому числі і введений програмістом), крім тих самих файлів або об’єктів.

Для типізованих файлів обидві процедури Reset та ReWrite встановлюють режим читання/запису у відповідності зі значенням системної змінної FileMode (по замовчанню FileMode дорівнює 2), тобто незалежно від вибору процедури відкриття, файл відкривається і для читання, і для запису. Режим FileMode можна змінювати простим привласненням (1 – тільки запис, 0 – тільки читання).

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

Не має сенсу застосовувати до типізованих файлів оператори ReadLn та WriteLn, так як для них не існує таких понять, як рядок та його кінець, немає признаку кінця файлу.

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

Type

Dim=Array[1..50,1..25] of Word;

Var

x,y:Dim;

f1,f2:File of Dim;

BEGIN

. . . {відкриття файлів f1 та f2}

Read(f1,x); {зчитування всього масиву 50х25}

. . . {обробка масивів}

Write(f2,y); { запис усього масиву }

. . . { закриття файлів }

END.

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

Безтипові файли, разом з іншими можливостями, дозволяють записувати на диск будь-які ділянки робочої пам’яті ПЕОМ та зчитувати їх у пам’ять з диску.

Ввід-вивід у безтипові файли здійснюється спеціальними процедурами:

BlockRead(Var f:File;Var Dest;Count:Word[; Var ReadIn:Word])