Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Лабораторна робота №5. 5.1 Стислі теоретичні відомості





Файли у мові 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])

BlockWrite(Var f:File;Var Source;Count:Word[;Var WriteOut:Word])

 

Ці процедури здійснюють читання у змінну Dest та запис із змінної Source блоків, які складаються з тієї кількості байтів, яке визначено для буфера файлу f. Count визначає число ємностей буферу, які зчитуються за одне звертання. Воно підкоряється умові:

 

Count * Розмір_Буферу < 64 K

 

Необов’язковий параметр ReadIn повертає число буферів, які зчитані поточною операцією BlockRead. Аналогічний параметр WriteOut процедури BlockWrite. Якщо операції запису та читання пройшли успішно, то значення ReadIn та WriteOut будуть дорівнювати відповідним значенням параметру Count. У противному випадку ReadIn та WriteOut будуть утримувати ціле число вдало перенесених блоків.

Розмір буферу передачі даних для безтипових файлів по замовченню дорівнює 128 байт. Цей розмір можна задавати явним засобом через параметр BufSize наступних процедур:

Reset(Var f:File;BufSize:Word)

ReWrite(Var f:File;BufSize:Word)

Значення параметру BufSize може бути встановлено від 1 байту до 64 К.

Для роботи з типізованими та безтиповими файлами зручно використовувати процедури та функції, які вбудовані в Borland Pascal:

 

FileSize(Var f):Longint – повертає число записів компонентів або блоків у відкритому файлі f;
FilePos(Var f):Longint – повертає номер запису компонента або блока у відкритому файлі f, попередньому тому, який буде зчитаний / записаний наступною операцією вводу-виводу;
Seek(Var f;N:Longint) – встановлює поточним компонентом або блоком у відчиненому файлі f компонент з номером N, відлічений від нульового;
Truncate(Var f) – відсікає частину відчиненого файлу f, починаючи з того компоненту, який був би зчитаний наступною операцією вводу, підтягуючи на її місце кінець файлу.

Для роботи з каталогами в Borland Pascal є наступний набір процедур:

 

GetDir(Drive:Byte;Var S:String) – повертає у рядку S поточне ім’я каталогу на диску з індексом Drive (0 – поточний диск, 1 – А:, 2 – В: і т. ін;
ChDir(S:String) – встановлює поточним каталог з ім’ям, яке міститься у S;
MkDir(S:String) – утворює каталог з ім’ям S на диску;
RmDir(S:String) – знищує з диску порожній каталог з ім’ям S.

Для роботи з файлами та каталогами у мові використовуються також засоби модулів DOS і WinDOS.

Компілятор Borland Pascal дозволяє генерувати виконуючий код з перевіркою коректності вводу-виводу – {$I+} та без неї – {$I-}. Цей ключ має локальну схему впливу та може використовуватися у тексті програми потрібне число разів. При {$I-} (по умовчанню {$I+}) виникнення помилки неперерве виконання програми, а продовжить програму з наступного оператору.

Для опитування коду помилки вводу-виводу, яка виникла, використовується функція IOResult: Integer. Опитати цю функцію можна тільки один раз після кожної операції вводу або виводу, так як вона своє значення при кожному виклику робить нульовим. Функція повертає значення 0 при вдалому завершенні операції вводу-виводу.

Приклад використовування функції IOResult:

BEGIN

{$I–}

Assign(f,‘file.my’);

Date: 2015-10-19; view: 279; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию