русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Урок 9 — Файли в Паскале (Pascal). Робота з файлами. Рішення завдань

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

  1. довготривалого зберігання даних ;
  2. доступу різних програм одним і тим же даними;
  3. обробки великих масивів даних, які неможливо цілком розмістити в оперативній пам'яті комп'ютера.

У Паскале визначені текстові файли, типізовані і нетипізовані. Файл не містить жодного елемента, називається порожнім. Створюється файл шляхом додавання нових записів у кінець спочатку порожнього файлу. Довжина файлу, тобто кількість елементів, не задається при визначенні файлу.

Всі файли повинні бути описані в програмі або в розділі змінних VAR, або в розділі типів TYPE. Під читанням файлу розуміють введення даних з зовнішнього файлу, що знаходиться на диску, в оперативну пам'ять машини. Запис у файл виводу результатів роботи програми з оперативної пам'яті на диск у файл.

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

Assign - встановлює зв'язок між ім'ям файлу в програмі (файлової змінною ) і фізичним ім'ям файлу, прийнятим в ОС.
Reset - відкриває існуючий файл для читання.
Rewrite - створює і відкриває новий файл для запису на зовнішньому пристрої (якщо файл раніше існував, вся попередня інформація з нього стирається).
Close - закриває відкритий файл.

Для визначення кінця файлу використовується стандартна вбудована функція EOF (файлова мінлива), яка приймає значення True, якщо досягнуто кінець файлу, і значення False в іншому випадку.

 

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

Текстові файли - файли на диску, що складаються з символів ASCII. Для розділення рядків використовуються символи «кінець рядка». Текстові файли є файлами з послідовним доступом. У будь-який момент часу доступна тільки один запис файлу. Інші записи стають доступними лише в результаті послідовного просування по файлу. Текстові файли внутрішньо розділені на рядки, довжини яких різні. Для розділення рядків використовується спеціальний тег кінця рядка. Оголошуються текстові файли типу змінної text. Обробляти їх можна тільки послідовно і з допомогою процедур і функцій:

Readln (f , st )- читання рядка st з файлу f і перехід на початок наступного ;
Writeln (f, st )- запис рядка st у файл f і маркера кінця рядка ;
Append (f ) - процедура, що відкриває файл f для додавання рядків в кінець файлу;
Eoln (st )- логічна функція, результат виконання якої дорівнює TRUE, якщо досягнуто маркер кінця рядка st.

Приклад 1. Створити текстовий файл, у який записати 3 пропозиції. Прочитати цей файл, вивести його вміст на екран. Визначити довжину кожного пропозиції.

Program File_text;
var
f1 : text;
st : string;
n: byte;
begin
assign (f1, "file1.txt"); {зв'язати з файлом file1.txt файлову змінну f1 }
rewrite (f1); { створити новий файл з ім'ям file1.txt }
writeln ( f1, "Дуже корисно вивчати"); { записати пропозиції у файл}
writeln ( f1, " всім студентам ");
writeln (f1, мовою Pascal ");
close (f1); { закрити файл для запису }
reset (f1); { відкрити файл для читання }
while not eof (f1) do { поки не кінець файлу f1}
begin
readln (f1, st); {читаємо рядок з файлу f1 }
writeln(st); { виводимо на екран }
n:= length (st); {визначаємо довжину рядка }
writeln (" довжина =",n);
end;
close (f1); { закрити файл для читання}
end .

Типізовані файли

Типізовані файли - це файли, що складаються з нумерованій послідовності об'єктів (записів) будь-якого типу. З такими файлами можна працювати в режимі прямого доступу, при якому виконується безпосереднє звернення до будь-якої запису файлу. Кожен запис файлу має свій номер, починаючи з 0 і т.д.
Процедури і функції обробки файлів:

1) Write і Read - записують і читають інформацію з вказаного файлу і переміщають вказівник файлу до наступного запису.
2) Seek (файлова змінна, номер запису); процедура переміщення вказівника на запис файлу з вказаним номером.
3) Truncate (файлова мінлива); процедура, усекающая файл з поточної позиції курсору файлу, тобто всі записи, які перебувають після вказівника файлу, видаляються.
4) Функція Filesize (файлова мінлива); має тип Integer і визначає розмір файлу, тобто число записів.
5) Функція Filepos (файлова мінлива); має тип Integer і повертає поточну позицію вказівник файлу.

Для додавання записів в кінець файлу використовуються процедури:

Readln (a );
Seek (f, filesize (f));
Write (f, a);

При цьому покажчик встановлюється за кінець файлу, оскільки нумерація записів починається з нуля. Після чого за допомогою Write можна додавати записи. Відкривати файл можна тільки процедурою Reset (f).
Для того, щоб у режимі довільного доступу вважати, а потім змінити значення запису, слід виконати два виклику процедури Seek.Один виклик перед операцією Read, а інший - перед операцією Write (т.к. Read після читання / запису перемістить курсор до наступного запису).

Приклад: Створити файл зі списку 10 студентів з їх оцінками ( номер, П.І.Б. і три оцінки). Вивести його вміст на екран, змінити прізвище студента з номером, введеним з клавіатури, заново прочитати файл.

Program file;
Type
wed = record {Тип wed включає 3 поля: n, fio, bal}
n : byte ; fio : string[15] ;
bal : array [1..3] of byte; {Поле bal - масив з 3 оцінок }
end;
Var spisok : wed ; {Запис spicok типу wed}
sp : file of wed; {Файл записів типу wed}
procedure vvod; { процедура створення файла}
var i,j:byte;
begin
{ оператор assing знаходиться в основній програмі }
rewrite ( sp); {відкриття файлу для запису}
with spisok do
For i:=1 to 10 do begin
n:=i;
writeln (" Введіть прізвище - ", i ); readln (fio);
writeln (" Уведіть 3 оцінки ", fio ); For j:= 1 to 3 do readln ( bal [j] );
write (sp , spisok); { запис у файл інформації про студента}
end;
close (sp); { закриття файлу для запису }
end;
procedure print; { процедура читання та друку всього файла }
var j : byte;
begin
reset ( sp); {відкриття файлу для читання}
writeln (‘ Список студентів: ‘);
while not eof (sp) do
with spisok do
begin
Read (sp, spisok); {читання даних з файлу}
write (n," ",fio); {висновок запису на екран}
For j:= 1 to 3 do write (" ", bal [j] );
writeln ;
end;
readln;
close (sp) ;
end;
procedure work;
var num: integer;
begin
reset ( sp); {відкриття файлу для читання}
writeln ("номер= "); readln (num);
seek (sp, num-1); {пошук запису з вказаним номером (нумерація записів з 0)}
(readsp,spisok);{читання і переміщення покажчика до наступного запису}
write ("fio="); writeln (spisok.fio);
seek (sp,filepos(sp)-1); {повернення до змінною запису }
writeln (‘ Введіть нове прізвище’ ); readln (spisok.fio);
write (sp, spisok); {запис у файл зміненої запису}
close (sp);
end;

begin {початок основної програми}
assign (sp,"Vedom.DAT"); {зв'язати файлову змін-ю sp з файлом Vedom.dat}
vvod; print; {процедури створення і читання файла}
work; print; {коректування і читання зміненого файлу}
readln
end.

Переглядів: 1491

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн