Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторна робота 10

.docx
Скачиваний:
1
Добавлен:
08.12.2018
Размер:
30.9 Кб
Скачать

Лабораторна робота №10

Текстові файли

Мета: Набуття навичок при роботі з текстовими файлами в мові PASCAL, їх представленні в програмі та порядку роботи з ними. Навчитись використовувати стандартні процедури та функції обробки файлів.

Обладнання: ПК, програмне забезпечення Turbo Pascal, методичні вказівки та завдання до лабораторної роботи.

Теоретичні відомості

Робота з файлом у мові Pascal складається з таких етапів: оголошення файлової змінної; зв'язування файлової змінної з іменем наявного файла або файла, що створюється; відкриття файла; обробка файла; закриття файла.

Синтаксис оголошення файлової змінної залежить від типу файла. Синтаксис оголошення змінної текстового файлу.

var <ім'я файлової змінної>: text;

Файл будь-якого типу може бути оброблений у програмі лише після того, як певна файлова змінна буде зв'язана з певним фізичним файлом. Це зв'язування виконується за допомогою процедури Assign, що має такий синтаксис:

Аssіgn(<файлова змінна>;<рядковий вираз>);

Фізичний файл, із яким була зв'язана файлова змінна, може перебувати в одному з таких станів.

  • Файл відкритий для читання: читання даних із файла дозволено, а запис до файла — заборонено.

  • Файл відкритий для запису: дозволений лише запис даних до файла.

  • Файл відкритий для читання і запису: дозволено як читання, так і запис до файла. У цьому стані не можуть перебувати текстові файли.

  • Файл закритий: із файлом не можна виконувати жодних дій.

Відкриття файла для читання або для читання і запису виконується процедурою Reset.

Reset(<файлова змінна>);

Текстові файли процедура Reset відкриває лише для читання.

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

В результаті спроби відкрити файл, якого немає на диску, виникне помилка Error #2: File not found (Файл не знайдено). Щоб запобігти перериванню програми внаслідок спроби відкрити неіснуючий файл, використовують директиву компілятора {$I-}. Вона вимикає автоматичний контроль помилок введення та виведення. Директиву {$I+} використовують для ввімкнення такого контролю. Якщо контроль помилок введення-виведення вимкнено, то для перевірки наявності файла на диску можна використовувати функцію IOResult. Коли файл існує на диску, функція IOResult повертає значення 0. Приклад показує, як використовуються директиви компілятора {$I-}, {$I+} і функція IOResult під час відкриття файлу.

Приклад

Program ex9_3;

var f: file of byte;

begin

  assign(f,'file.dat');

  {$I-}

  reset(f);

  {$I+}

  if IOresult = 0 then

    writeln('File is open')

  else

    writeln('File not found');

  readln;

end.

Відкриття файла для запису або читання і запису здійснюється процедурою Rewrite.

Rewrite(<файлова змінна>);

Текстові файли процедура Rewrite відкриває лише для запису.

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

Для дописування рядків до вже наявного текстового файла його потрібно відкрити за допомогою процедури Append:

Арреnd(<файлова змінна>);

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

Файли закриваються процедурою Close:

Close(<файлова змінна>);

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

Операції над текстовими файлами

Зчитування і запис текстових файлів

Зчитування даних із текстового файлу здійснюється процедурами Read та Readln за таким синтаксисом:

Read(<файлова змінна>;<список введення>);

Readln(<файлова змінна>;<список введення>);

Тут <список введення> є переліком змінних символьного, рядкового, цілочислового або дійсного типу.

Після зчитування певного компонента файловий покажчик зсувається до наступного компонента. Якщо виконується зчитування з файлу до змінної типу char, то процедура Read зчитує один символ. Коли досягнуто кінця рядка, результатом зчитування є символ кінця рядка, #13, а коли досягнуто кінця файлу, зчитується символ кінця файлу, #26.

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

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

Приклад

Розглянемо приклад зчитування даних із текстового файлу у змінні різних типів. Результат роботи програми зображено на рис. 1. Програма опрацьовувала файл, який містив такі дані: 5 -20 1 2 3 4 5 string.

Program ex9_4;

var f:text;

  a,i:integer;

  b:real;

  s:string;

  mas:array[1..5] of integer;

begin

  writeln('reading from the text file');

  Assign(f,'f.txt');

  reset(f);

  read(f,a,b);

  for i:=1 to 5 do

    read(f,mas[i]);

    readln(f,s);

  writeln('a=',a,' b=',b,' s=',s);

  writeln('array of integers: ');

  for i:=1 to 5 do

    write(mas[i],'');

  writeln;

  close(f);

  readln;

end.

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

Приклад

Наведемо програму, що виводить на екран перші п'ять рядків текстового файла.

Program ex9_5;

var f:text;

  s:string;

  i:integer;

begin

  writeln('reading rows from the text file');

  assign(f,'t.txt');

  reset(f);

  for i:=1 to 5 do

    begin

      readln(f,s);

      writeln(s);

    end;

  close(f);

  readln;

end.

Запис до текстового файлу здійснюється за допомогою процедур Write та Writeln, що мають такий синтаксис:

Write(<файлова змінна>;<список виведення>);

Writeln(<файлова змінна>;<список виведення>);

Тут <файлова змінна> — змінна типу text; <список виведення> — перелік змінних або виразів символьного, рядкового, цілочислового, дійсного чи логічного типу.

Процес запису до текстового файлу даних різних типів проілюстрований у наведеному далі прикладі.

Приклад

Program ex9_6;

var f:text;

  s:string;

  a,i:integer;

  b:real;

begin

  writeln('Usage of the procedure writeln to file');

  Assign(f,'example.txt');

  rewrite(f);

  for i:=1 to 5 do

    begin

      writeln('enter integer, real, string');

      readln(a,b,s);

      writeln(f,'a=',,' b=',b,' s=',s);

    end;

  close(f);

  readln;

end.

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

Еоf(<файлова змінна>) : boolean;

Дана функція повертає значення булевого типу. Якщо файловий покажчик посилається на кінець файлу, буде повернено значення true. Отже, послідовне зчитування всіх компонентів із файлу, розмір якого невідомий, може бути реалізоване таким циклом:

While not eof(f) do

  Readln(f,s):

Порядок виконання роботи:

  1. Створити текстовий файл:

1) File->New

2)набрати текст програми

3)зберегти з розширенням *.txt;

  1. Записати текст програми обробки текстового файлу згідно умови завдання;

  2. Запустити програму на виконання і перевірити правильність роботи програми.

  3. Відповісти на контрольні запитання та оформити звіт.

Контрольні запитання

  1. Дайте поняття фізичного та логічного файлу.

  2. Чим файли і масиви схожі? Чим вони відрізняються?

  3. Чим відрізняються бінарні файли від текстових?

  4. Який метод доступу до компонентів текстового файлу?

  5. Як зв’язати логічний файл з фізичним?

  6. Які способи відкриття файлу надає мова Pascal?

  7. Як зчитувати та записувати дані у тестовий файл?

Звіт повинен містити:

  1. Тему, мету, обладнання лабораторної роботи.

  2. Завдання згідно варіанту.

  3. Текст програми.

  4. Результат виконання програми.

  5. Аналіз допущених під час роботи помилок.

  6. Відповіді на контрольні запитання

  7. Висновки.

Викладач Смерека А.Г.

Завдання до лабораторної роботи №10

Варіант 1. Порівняти кількість букв „а" в двох текстових файлах.

Варіант 2. Підрахувати в текстовому файлі кількість голосних букв.

Варіант 3. Підрахувати кількість слів текстового файлу, враховуючи, що слова розділені одним пробілом.

Варіант 4 Підраховує в текстовому файлі кількість рядків, довжина яких співпадає з заданим числом.

Варіант 5. Підрахувати кількість рядків текстового файлу, що починаються з приголосної літери.

Варіант 6. Роздрукувати на екран текстовий файл, додаючи на початку кожного ряду його порядковий номер.

Варіант 7. Створити текстовий файл значень функції cos (x) на відрізку [-2л;; 2л] з кроком 0,1.

Варіант 8. Існують два текстових файли, в яких записані латинські літери. Створити новий файл, в який переписати спочатку всі елементи першого файлу, а потім всі елементи другого.

Варіанті 9. В текстовому файлі, замінити букви „а" на „о", букви „и" замінити буквами „і".

Варіант 10. Надрукувати вміст текстового файлу на екран, друкуючи по три слова в кожному рядку.

Варіанті 11. Текстовий файл, зашифрувати методом Піфагора з кроком З і записати в новий файл.

Варіанті 12 Переписати текстовий файл в новий файл, відкидаючи всі коментарі (текст в фігурних {} дужках разом із дужками).

Варіанті 13. Заданий текстовий файл переписати в новий файл, розбиваючи його текст на рядки так, щоб кожний рядок закінчувався знаком питання. Завдання до лабораторної роботи № б .

Варіант 14. Створити текстовий файл з п (п- задається користувачем) рядків, в першому з яких - одна цифра „1", в другому - дві цифри „2" і так далі.

Варіант 15. Із заданого файлу зчитати літери до першої крапки і переписати їх в новий текстовий файл, формуючи в ньому рядки по 10 літер.

Державний вищий навчальний заклад

Чернівецький політехнічний коледж

Предмет „Основи програмування та алгоритмічні мови

Лабораторна робота №8 Урок №33

Тема: Текстові файли_______________________________________________________________________­_

Мета: Набуття навичок при роботі з текстовими файлами в мові PASCAL, їх представленні в програмі та порядку роботи з ними. Навчитись використовувати стандартні процедури та функції обробки файлів ____

Міжпредметні зв’язки: Основи інформатики та ОТ______________________________________________

Забезпечення заняття:

1. Наочні посібники Методичні вказівки_______________________________________________________

2. Навчальні місця _________________________________________________________________________

3. Література Т.В. Ковалюк „Основи програмування”, Т.А.Павловская „Паскаль”.____________________

Зміст і хід заняття:

1. Організаційний момент____________________________________________________________________

2. Актуалізація опорних знань_________________________________________________________________

1) Оголошення змінних файлового типу______________________________________________________

2) Порядок роботи з файлами ______________________________________________________________

3) Процедури та функції для роботи з текстовими файлами_____________________________________

3. Мотивація уроку_____________________________________________________________

4. Техніка безпеки______________________________________________________________

5. Експериментальна частина (Варіанти завдань)____________________________________

6. Підсумки___________________________________________________________________

7. Домашнє завдання_– оформлення звіту _________________________________________

Викладач Смерека А.Г.