Зчитування даних з файлу і запис їх у файл Методичні рекомендації До виконання лабораторної роботи № 4 Тема: Робота с тестовими файлами. Мета: 1. . Вивчення файлових типів в мові Турбо-Паскаль. Вивчення основних процедур роботи з текстовими файлами. 2. Отримання навиків в організації текстових файлів та використанні їх для обробки символьної інформації. Короткі відомості із теорії Доступ до файлів В першу чергу при роботі з файлами необхідно привести у відповідність файлову змінну і ім'я файлу, з яким він зберігається на зовнішньому носієві. З цим ім'ям працює операційна система(ОС) DOS. Відповідність встановлюється за допомогою процедури: ASSIGN (< ф.п.>, < ім'я файлу або л.у.>); Тут < ф.п.> - файлова змінна; < ім'я файлу або л.у.> - це повне ім'я файлу, яке включає шлях доступу, безпосередньо ім'я файлу і розширення. "л.у". - стандартний логічний пристрій. Наприклад: ASSIGN (F1, 'a:\Tp5\DAT\St629.DAT'); ASSIGN (F2, 'Dannye.DAT'). Якщо не вказаний шлях до файлу, то запис або зчитування здійснюється з поточного директорія або в поточний директорій. Як ім'я файлу в процедурі ASSIGN можна вказувати логічний пристрій з наступного списку: CON, PRN, AUX. CON - це ім'я консолі. На персональному комп'ютері (ПК) під консоллю розуміється сукупність двох пристроїв : клавіатури і дисплея. Клавіатура використовується для введення інформації, а дисплей для виводу. PRN - це стандартне ім'я принтера. У ОС PRN стандартно призначається LPT1. У модулі Printer Турбо-Паскаля оголошена файлова змінна Lst. Тому при відображенні даних на принтер, досить підключити модуль Printer до програми, а в пропозиціях Write і Writeln першим аргументом записати ім'я файлової змінної Lst : Write (Lst, < список даних, що виводяться >); Приклад виведення інформації без використання модуля Printer : ... VAR F : File; BEGIN Assign(F, PRN); ReWrite(F); Writeln(F, 'Приклад використання Л.У. - PRN'); Close(F); END; Ініціація файлу і завершення роботи з ним Перш ніж почати обробку файлу необхідно виконати деякі операції по роботі з пристроєм, на якому зберігається або зберігатиметься файл. Так наприклад, при створенні файлу необхідно: виділити область пам'яті на зовнішньому пристрої, в яку записуватимуться дані файлу; запам'ятати ім'я файлу і адресу цієї області. Якщо має відбутися робота з файлом, вже існуючим на зовнішньому носієві, то потрібні наступні дії: по вказаному імені файлу знайти адресу, з якої записані дані цього файлу; встановити голівку пристрою на початок файлу. Ця сукупність операцій називається ініціацією файлу або "відкриттям" файлу. Ініціюється файл за допомогою процедур Reset і ReWrite. За допомогою процедури Reset ініціюється, тобто відкривається раніше створений файл. За допомогою процедури ReWrite ініціюється файл для запису, тобто новостворюваний файл. Синтаксис: Reset(< ф.п.> [,< розмір запису в байтах >]); ReWrite(< ф.п.> [,< розмір запису в байтах >]); Другий аргумент вказується тільки для файлів, що не типізуються . Текстові файли можна ініціювати також і процедурою Append : Append(< ф.п.>); В цьому випадку раніше створений файл відкривається для додавання даних в кінець файлу. Завершивши роботу з файлом, необхідно його закрити. При закритті файлу ОС підраховує розмір файлу в байтах і запам'ятовує його. Крім того, запам'ятовується також інформація про дату і час створення файлу або його останньої модифікації (коригування). Закриття файлу даних здійснюється процедурою Close : Close(< ф.п.>); При зчитуванні даних з раніше створеного файлу кінець файлу можна визначити за допомогою функції EOF : EOF(< ф.п.>); Ця функція має значення TRUE при зчитуванні маркера кінця файлу. Інакше вона матиме значення FALSE. Ця функція зазвичай використовується для організації циклу по читанню усіх компонент файлу : .. while not EOF(F1) do begin ... .. < зчитування і обробка компонент файлу > ... .. end; Зчитування даних з файлу і запис їх у файл Безпосереднє введення інформації здійснюється пропозиціями READ і READLN, а виведення ( запис) інформації - WRITE і WRITELN. Особливістю їх застосування до файлу є обов'язковість вказівки файлової змінної як першого параметра в списку елементів введення або виводу : Read(< файлова змінна >, < список введення >); ReadLn(< файлова змінна >, < список введення >); Write(< файлова змінна >, < список виводу >); WriteLn(< файлова змінна >,< список виводу >). Текстові файли Текстовий файл - це сукупність рядків змінної довжини. Змінна довжина рядків визначає наявність маркерів, які відмічають кінець рядка. Як маркери використовуються два керівників символу "Переклад рядка" і "Повернення каретки", їх десяткові коди: #10 #13. Назви символів, що управляють, "Переклад рядка"(LF - Line Feed) і "Повернення каретки"(CR - Carriage Return) узяті аналогічно роботи з машинкою, що пише. Кінець рядка можна визначити за допомогою функції EOLn : EOLn(< ф.п.>); Для запису даних у файл використовуються процедури WRITE і WRITELN : Write(< ф.п.>, < список виведення рядків символів >); Writeln(< ф.п.>, < список виведення рядків символів >). За пропозицією WRITE значення даних із списку запишуться у файл підряд без всяких роздільників. Тому програміст, використовуючи пропозицію WRITE, повинен потурбуватися про роздільники між даними, якщо вони потрібні. За пропозицією WRITELN у файлі після кожного виведеного стрингового значення будуть записані ознаки кінця рядка. Для читання даних з файлу використовуються процедури READ і READLN : Read(< ф.п.>, < список стрингов, що вводяться >); Readln(< ф.п.>, < список стрингов, що вводяться >); За пропозицією READ з файлу вибирається стільки символів, скільки вказано в описі поточного стринга, що належить списку введення. Вибрана послідовність символів привласнюється поточному стрингу. Ця сукупність операцій повторюється для усіх елементів списку введення. За пропозицією READLN з файлу послідовно прочитуються рядки і привласнюються стрингам із списків. Якщо вибраний рядок має більшу кількість символів, чим вказано в описі поточного стринга, то вона обрізується до вказаної довжини, при цьому частина інформації втрачається. Тому необхідно стежити за відповідністю довжин стрингов, записуваних у файл і прочитуваних з файлу. Приклад: ... Var Fio, Otch : string[15]; Name : string[10]; i : integer; F : text; Begin Assign(F, 'St629.DAT'); { файл створюватиметься в поточному каталозі } { створення файлу або первинний запис даних у файл} ReWrite(F); { відкриття файлу для запису } for i:=1 to 5 do { обмежимося введенням п'яти студентів } begin Write('Прізвище: '); Readln(Fam); Write('Ім'я: '); Readln(Name); Write('По батькові: '); ReadLn(Otch); Write(F, Fam, Name, Otch); end; close(F); { читання даних з файлу і виведення їх на екран } WriteLn(' Прізвище Ім'я По батькові'); Reset(F); { відкриття існуючого файлу } for i:=1 to 5 do begin 86 Read(F, Fam, Name, Otch); Write(Fam:16, Name:11, Otch :15); end; close(F); End. |