.: Menu :.
Home
Реферати
Книги
Конспекти уроків
Виховні заходи
Зразки документів
Реферати партнерів
Завантаження
Завантажити
Електронні книги


????????...

 
��������...
ФАЙЛИ 


ФАЙЛИ

Введення файлового типу в мову ПАСКАЛЬ викликано необхідністю за¬безпечити можливість роботи з периферійними (зовнішніми) пристроями ЕОМ, призначеними для введення, виведення і збереження даних.
Файловий тип чи даний файл визначає впорядковану сукупність довільно¬го числа однотипних компонентів.
Загальна властивість масиву, множини і запису полягає в тім, що кількість їхніх компонентів визначено на етапі написання програми, тоді як кількість компонентів файлу в тексті програми не визначається і може бути довільним.
Поняття файлу досить широке. Це може бути звичайний файл на диску, ко-мунікаційний порт ЕОМ, пристрій друку, чи клавіатура або інші пристрої.
При роботі з файлами  виконуються операції введення-виведення. Операція введення означає перепис даних із зовнішнього пристрою (із вхідного файлу) в основну пам'ять ЕОМ, операція виведення - це пересилання даних з основної пам'яті на зовнішній пристрій (у вихідний файл).
Файли на зовнішніх пристроях часто називають фізичними файлами. Їхні імена визначаються операційною системою. У програмах мовою Пас¬каль імена файлів задаються за допомогою рядків. Наприклад, ім’я файлу на диску може мати вид: "C:\ A", "A:\ Lab1.DAT', "В:\С150\pr.раs", "lаb3.раs".
Операційна система МS-DОS не робить особливого розходження між фай¬лами на дисках і стрічках і пристроями  ЕОМ і портами комунікацій. У ТURВО РАSСАL можуть використовуватися імена пристроїв і портів, визначенні в МS-DОS, наприклад: "СОN", "LРТ1", "РRN", "СОМ1", "АUХ", "NUL".
З файловою системою ТURВО РАSСАL зв'язане поняття буфера введення-виведення. Введення і виведення даних здійснюється через буфер. Буфер — це область у пам'яті, що виділяється для кожного файлу. При записі в файл вся інформація спочатку направляється в буфер і там накопичується доти, поки весь обсяг буфера не буде заповнений. Тільки після цього чи після спеціальної ко¬манди скидання відбувається передача даних на зовнішній пристрій. При чи¬танні з файлу, дані спочатку зчитуються у буфер, причому даних зчитується не стільки, скільки запитується, а скільки поміститься в буфер.
Механізм буферизації дозволяє більш швидко й ефективно обмінюватись інформацією з зовнішніми пристроями.
Для роботи з файлами в програмі необхідно визначити файлову змінну. ТURВО РАSСАL підтримує три файлових типи: текстові файли, компонентні файли, безтипові файли.
Опис змінних файлів текстового типу здійснюється за допомогою службо¬вого слова Техt, наприклад:
vаr  tStоrу : Теxt;
Опис компонентних файлів має вид:
vаr fСоmр : File оf Т;  де Т - тип компонента файлу.
Приклади опису файлової змінної  компонентного типу:
tуре М = аrrау [1..500]   оf  LоngInt;
vаr  f1 : Filе  оf Rеаl;
f2 : File оf  Integer;
fLі: File  оf М;
Безтипові файли описуються за допомогою службового слова File:
vаr  f:   File;
Файлові змінні, котрі описані в програмі, називають логічними файлами. Всі основні процедури і функції, що забезпечують введення-виведення даних, працюють тільки з логічними файлами. Фізичний файл повинний бути зв'язаний з логічним до виконання процедур відкриття файлів.
TURBO PASCAL вводить ряд процедур і функцій, застосованих для будь-яких типів файлів: Assign, Reset, Rewrite, Сlose, Rename, Еrase, Еоf, IOResult.
Процедура Assign (var f; FileName:String) зв'язує логічний файл f з фізичним файлом, повне ім'я якого задано в рядку FileName.
Процедура Reset(var f) відкриває логічний файл f для наступного читання даних чи, як говорять, відкриває вхідний файл. Після успішного виконання про¬цедури Reset файл готовий до читання з нього першого елемента.
Процедура Rewrite(var f) відкриває логічний файл f  для післязапису, що дає, дані (відкриває вихідний файл). Після успішного виконання цієї процедури файл готовий до запису в нього першого елемента.
Файл до моменту виклику процедури Erase повинний бути закритий. Про¬цедура С1оsе(var f) закриває відкритий до цього логічний файл. Виклик проце¬дури Сlose необхідний при завершенні роботи з файлом.
Якщо з якоїсь причини процедура Сlose не буде виконана, файл усе ж буде створений на зовнішньому пристрої, але вміст останнього буфера в нього не бу¬де перенесено. Для вхідних файлів використання оператора закриття файлу не¬обов'язково.
Логічна функція ЕОF(var f:Вооlеаn) повертає значення ТRUE, коли при читанні досягнутий кінець файлу. Це означає, що вже прочитаний останній еле¬мент чи файл після відкриття виявився порожній.
Процедура Rеnаmе(var f; NewName:String) дозволяє перейменувати фізичний
файл на диску, зв'язаний з логічним файлом f.  Перейменування можливо
після закриття файлу.
Процедура Erase(var f) знищує фізичний файл на диску, який був зв'язаний з файловою змінною f.
Функція ІОResult:Integer повертає ціле число, що відповідає коду остан¬ньої помилки введення-виведення. При нормальному завершенні операції функція поверне значення 0. Значення функції ІОResult необхідно привласнити змінній, тому що при кожному виклику функція обнуляє своє значення. Функція IOResult працює тільки при виключеному режимі перевірок помилок введення чи виведення з ключем компіляції {$I-}.
ТЕКСТОВІ ФАЙЛИ
Особливе місце в мові ПАСКАЛЬ займають текстові файли, компоненти, яких мають символьний тип. Для опису текстових файлів у мові визначено стандартний тип Техt:
vаr  ТF1,   ТF2:   Техt;
Текстові файли являють собою послідовність рядків, а рядки — послідов¬ність символів. Рядки мають змінну довжину, кожен рядок завершується оз¬накою кінця рядка.
З ознакою кінця рядка зв'язана функція ЕОLn (vаr Т:Техt):Вооlеаn, де Т — ім'я текстового файлу. Ця функція приймає значення True, якщо досягнути кінець рядка, і значення False, якщо кінець рядка не досягнутий.
Для операцій над текстовими файлами, крім перерахованих, визначенні також оператори звертання до процедур:
Readln(T)- пропускає рядок до початку наступного;
Writeln(Т)-завершує рядок файла, у якому відбувається запис, є ознакою кінця рядка і переходить до початку наступного.
Для роботи з текстовими файлами введена розширена форма операторів введення і виведення. Оператор Read(Т,Х1,Х2,...ХК) еквівалентний групі опера¬торів:
begin
Read(T,X1);
Read(T,X2);
............
Read(T,XK);
end;
Тут Т-текстовий файл, а змінні X1, Х2,...ХК можуть бути змінними цілого, дійсного чи символьного типу, або рядком. При зчитуванні значень змінних з файлу вони перетворюються з текстового представлення в машинне.
Оператор Write(Т,Х1,Х2,...ХК) еквівалентний групі операторів:
begin
Write(T,X1);
Write(T,X2);
............
Write(T,XK);
end;
До текстових файлів відносяться стандартні файли INPUT, ОUTPUТ. Розглянуті раніше оператори введення-виведення є часткою операторів об¬міну з текстовими файлами, коли використовуються стандартні файли введення-виведення Input, OutPut.
Робота з цими файлами має особливості:
- імена цих файлів у списках введення-виведення не вказуються;
- застосування процедур Reset, Rewrite і Сlоsе до стандартних файлів введення-виведення заборонено;
- для роботи з файлами Input, Оutput введений різновид функції EOln без параметрів.
TURBO PASCAL вводить додаткові процедури і функції, застосовні тільки до текстових файлів, це SetTextBuf, Арреnd, Flush, SeekЕOln, SеекЕОF.
Процедура SetTextBuf (var f: Техt; var Вuf; ВufSize:Word) служить для збільшення чи зменшення буфера введення-виведення текстового файлу f. Зна¬чення розміру буфера для текстових файлів за замовчуванням дорівнює 128 байтів. Збільшення розміру буфера скорочує кількість звертань до диска. Рекомендується змінювати розмір буфера до відкриття файлу. Буфер файлу почнеться з першого байта змінної Вuf. Розмір буфера задається в необов'язковому
параметрі ВufSize, а якщо цей параметр відсутній, розмір буфера визначається довжиною змінної Вuf.
Процедура Append (var: Теxt) служить для спеціального відкриття вихід¬них файлів. Вона застосовна до вже існуючих фізичних файлів і відкриває для запису файл в кінці.
Процедура Flush(var f:Техt):Boolean застосовується до відкритих вихідних файлів. Вона примусово записує дані з буфера у файл незалежно від ступеня його заповнення.
Функція SeekEOLn(var f:Text) повертає значення Тrue, якщо до кінця рядка залишилися тільки пробіли.
Функція SeekEOF(vаr f: Техt):Вооlеаn повертає значення Тrue, якщо до кінця файлу залишилися рядки, заповнені пробілами.

КОМПОНЕНТНІ ФАЙЛИ
Компонентний чи типізований файл —це файл з оголошеним типом його компонентів. Компонентні файли складаються з машинних представлених значень змінних, вони зберігають дані в тім же виді, що і пам'ять ЕОМ. Опис величин файлового типу має вигляд:
Tуре М= File of T;    де М - ім'я файлового типу, Т-тип компонента.
Наприклад:
Type
FIO= String[20];
SPISOK=File оf FIО;
var
STUD, РRЕР: SРІSОК;
Тут STUD,  РRЕР імена файлів, компонентами  яких є рядки. Опис файлів можна задавати в розділі опису змінних:
vаr
fs imv: File of Char;
fr: File оf Rеаl;

Компонентами файлу можуть бути всі скалярні типи, а із структурованих - масиви, множини, записи. Практично у всіх конкретних реалізаціях мови ПАСКАЛЬ конструкція "файл файлів" неприпустима.
Всі операції над компонентними файлами виробляються за допомогою стандартних процедур: Reset, Rewrite, Read, Write, Сlose.
Для введення-виведення використовуються процедури:
Read(f, X);
Write(f, X);
де f — ім'я логічного файлу, X - або змінна, або масив, або рядок, або множина, або запис з таким же описом, який має компоненти файлу.
Виконання процедури Read(f,Х) складається з читання з зовнішнього пристрою однієї компоненти файлу і запису її в X. Повторне застосування процедури Read(f,Х) забезпечить читання наступного компонента файлу і запис її в Х.
Виконання процедури Write(f,Х) складається з запису X на зовнішній пристрій як однієї компоненти. Повторне застосування цієї процедури забезпечить запис X як наступного компонента файлу.
Для роботи з компонентними файлами введена розширена форма операторів введення і виведення:
Read(f,X1,Х2...ХК)
Write(f,Х1,X2,...ХК)
Тут f- компонентний файл, а змінні XI, Х2,...ХК повинні мати ж тип, що й оголошений тип компонентів файлу f.
БЕЗТИПОВІ ФАЙЛИ
Безтипові файли дозволяють записувати на диск довільні ділянки пам’яті ЕОМ і зчитувати їх з диска в пам'ять. Операції обміну з безтиповим й файлами здійснюється за допомогою процедур BlockRead і ВІоскWrite. Крім того, вводиться розширена форми процедур Reset і Rewrite. В іншому принципи роботи залишаються такими ж, як і з компонентними файлами.
Перед використанням логічний файл
vаr f: File;
повинний бути зв'язаний з фізичним за допомогою процедури Assign. Далі файл повинний бути відкритий для читання чи для запису процедурою Reset чи Rewrite, а після закінчення роботи закритий процедурою Сlоsе.
При відкритті файлу довжина буфера встановлюється за замовчуванням у 128 байт. Turbo Pascal дозволяє змінити розмір буфера введення -виведення, для чого варто відкривати файл розширеним записом процедур
Reset(var f: File; BufSize:Word)
чи
Rewrite(vаr f: Fі1е; BufSize: Word)
Параметр ВufSize задає число байтів, що зчитуються з файлу, що записані у нього за одне звертання. Мінімальне значення BufSize - 1 байт, максимальне - 64 Кбайт.
Читання даних з безтипового файлу здійснюється процедурою
ВlockRead(var: File; vаr Х; Соunt: Word; vаr QuantВІоск: Word );
Ця процедура здійснює за одне звертання читання в змінну X кількості блоків, задана параметром Соunt, при цьому довжина блоку дорівнює довжині буфера. Значення Count не може бути менше 1. За одне звертання не можна прочитати більше, ніж 64 Кбайт.
Необов'язковий параметр QuantВІоск повертає число блоків (буферів), прочитаних поточною операцією ВlockRead. У випадку успішного завершення операції читання QuantВlоск = Соunt, у випадку аварійної ситуації параметр QuantBlock буде містити число вдало прочитаних блоків. Звідси випливає, що за допомогою параметру QuantВІоск можна контролювати правильність виконання операції читання.
Запис даних у безтиповий файл виконується процедурою:
ВlоскWrite ( var f: File; var Х, Соunt:Word; var QuantBlock: Word);
яка здійснює за одне звертання запису з змінної Х кількість блоків, задане параметром Соunt, при цьому довжина блоку дорівнює довжині буфера.
Необов'язковий параметр QuantBlock повертає число блоків (буферів X записаних успішно поточною операцією В1оскWrite.
ПОСЛІДОВНИЙ І ПРЯМИЙ ДОСТУП
Зміст послідовного доступу полягає в тім, що в кожен момент часу доступний лише один компонент із усієї послідовності. Для того, щоб звернутися (одержати доступ) до компонента з номером K+1, необхідно переглянути від початку файлу K-1 попереднього компоненту. Після звертання до компонента з номером K можна звертатися до компонента з номером K+1. 3відси випливає, що процеси формування (запису) компонентів файлу і перегляду (читання) не можуть довільно чергуватися. Таким чином, файл спочатку будується за допомогою наступного додавання компонентів у кінець, а потім може послідовно проглядатися від початку до кінця.
Розглянуті раніше засоби роботи з файлами забезпечують наступний доступ. Turbo Pascal дозволяє застосовувати до компонентного і безтипового файла, записані на диску, способи прямого доступу. Прямий доступ дає можливість заздалегідь визначити у файлі блок, до якого буде застосовано операцію введення -виведення. У випадку безтипового файлу блок дорівнює розміру буфера, для компонентних файлів блок - це одна компонента файлу.
Прямий доступ припускає, що файл являє собою лінійну послідовність блоків. Якщо файл містить n блоків, то вони пронумеровується від 1 через 1 до n. Крім того, вводиться поняття умовної границі між блоками, при цьому
умовна границя з номером 0 розташована перед блоком з номером 1, границя з номером 1 розташована перед блоком з номером 2 і, нарешті, умовна границя з номером n знаходиться після блоку з номером n+1.
Реалізація прямого доступу здійснюється за допомогою функцій і процедур FileSize, FilePos, Seek і Truncate.
Функція FileSize (vаr f: LongInt) повертає кількість блоків у відкритому файлі f.
Функція FilePos(vаr f: LongInt) повертає поточну позицію в файлі f. Позиція у файлі —це номер умовної границі. Для, тільки що, відкритого файлу поточною позицією буде границя з номером 0. Це означає, що можна записати чи прочитати блок з номером 1. Після читання чи запису першого блоку поточна позиція переміститься на границю з номером 1, і можна буде звертатися до блоку з номером 2. Після прочитання останнього запису значення FilePos дорівнює значенню FileSize.
Процедура Sеек (vаr f, N:LongInt) забезпечує призначення поточної позиції у файлі (позиціонування). У параметрі N повинен бути заданий номер умовної границі, що передує блоку, до якого буде приводитися наступне звернення. Наприклад, щоб працювати з блоком 4, необхідно задати значення N, рівне 3. Процедура Sеек працює з відкритими файлами.
Процедура Truncate (var f) встановлює в поточній позиції ознаку кінця файлу і знищує усі наступні блоки.
Приклад. Нехай на НМД є текстовий файл ID.DAT, що містить числові значення дійсного типу по два числа в кожному рядку — значення аргументу і функції відповідно. Кількість пар чисел не більш 200. Скласти програму, що читає файл, значення аргументу і функції записує в одномірні масиви, підраховує їхню кількість, виводить на екран дисплея і записує у файл компонентного типу RD.DАТ.
Рrogram F;
var rArg, rF: Array[1..200] of  Real;
inf : Техt;
outf: file of Real;
n,I : Integer:
begin
Assign(inf, ‘ID.DAT’);
Assign(outf, ’RD.DAT’);
Reset(inf);
Rewrite(outf)
n:= 0
while not EOF(inf) do
begin
n:=n+1;
Readln(inf, rArg[n],rF[n])
end;
for I:=1 to n dо
begin
Writeln(I:2, rArg[ I ]:8:2 rF[I]:8:2);
Write(outf, rArg[I], rF[I]);
end;
close(outf);
end.
ЗАВДАННЯ ДО РОЗВ’ЯЗАННЯ
1.    Дано файл f, компонентами якого є дійсні числа. Знайти суму компонент файла f.
2.    Дано файл f, компонентами якого є дійсні числа. Знайти найбільше зі значень модулів компонент з парними номерами.
3.    Дано файл f, компонентами якого є цілі числа. Знайти кількість квадратів непарних чисел серед компонент.
4.    Дано символьний файл f. Записати в файл g компоненти файлу f в зворотному порядку.
5.    Дано файл f, компонентами якого є цілі числа. Отримати в файлі g всі компоненти файлу f, які діляться на 3 і не діляться на 7.

Search:
????????...

структура навчального процесу з фізики

характеристика Жульєна

характеристика до Не судилось

світовий ринок товарів і послуг

що таке пожежа

Які наслідки настають у разі укладення буд угоди в межах госпо¬дарської діяльності що потребує ліцензування без наявності ліцензії?

передмова до людської комедії

дослідження взаємодії заряджених тіл

цитати до роману хіба ревуть воли як ясла повні

Методология та методи наукового дослидження



?????????? ????????? ????
   
Created by Yura Pagor, 2007-2010