Al 17
Al 17
и
алгоритмические языки
Лекция 18
Язык Паскаль: файловые типы
Язык Паскаль.Типы данных
целый
вещественный стандартные
логический
простые символьный
перечислимые
ограниченные
регулярные
типы сложные комбинированные
данных множественные
файловые
ссылочные
2
Язык Паскаль. Файловые типы
Объекты файловых типов – файлы.
Файл – последовательность элементов, обладающая
следующими свойствами:
– все элементы одного и того же типа (базового типа файла)
– число элементов не фиксировано
f↑ c - буфер
программа
Считывать элементы из файла можно только последовательно
Запись элементов происходит в конец файла 3
Описание файловых типов и переменных
Файловый тип – множество всех файлов, имеющих один и тот
же базовый тип
Примеры
type Т1 = file of char;
Т2 = file of array[1..10] of boolean;
Переменные-файлы
var t: Т1;
b1, b2: T2;
z: file of real;
4
Операции над файлами
Присваивание файлов запрещено!
Передача файла в процедуру или функцию – только по ссылке
procedure P(var ff:T1);
Режимы работы с файлом
– чтение
– запись
Обозначения:
type T = ….....
var f: file of T;
x: T; 5
{f↑ - буферная переменная}
Работа в режиме чтения
1. Установка режима чтения
reset(f)
6
Работа в режиме чтения
3. Считывание элемента из файла
get(f)
Особые случаи:
1. Если до выполнения get маркер указывал на последний элемент
файла, то после get
значение буферной переменной не определено,
eof(f) = true
2. Если перед выполнением get было eof(f)=true, то get будет
ошибкой 7
Работа в режиме чтения
Пример
Суммирование элементов файла
S:=0;
reset(G); {на начало G + режим чтения}
while not eof(G) do {пока не конец G}
begin
S:=S+G↑; {добавить в S очередное число}
get(G) {к следующему элементу файла}
end
8
Работа в режиме чтения
3. Запись элемента файла в переменную
read(f,x)
x:=f↑;
get(f)
S:=0;
reset(G);
while not eof(G) do
begin
read(G,x);
S:=S+x
end;
9
Работа в режиме записи
1. Установка режима записи
rewrite(f)
10
Работа в режиме записи
3. Запись элемента в файл – write
write(f,x)
f↑:=x;
put(f)
Пример:
Запись в файл всех цифр
var t: file of char;
c: char;
type F = file of T;
{в качестве Т - любой допустимый тип}
var
f: file of T; {T – любой допустимый тип}
begin
assign (f, 'data.txt')
{работа с файлом}
close(f)
end;
13
Текстовые файлы
var t : text;
┌─────────────────────────────────
t│ a b c ▓ ▓ d e ▓ ...
└─────────────────────────────────
14
Операции над строками текстового файла
1. Логическая функция eoln(t)
eoln(t)-ошибка
a b c ▓d e ▓ ▓ a b c ▓d e ▓ ▓ a b c ▓d e ▓ ▓
readln(t) readln(t)
16
Работа с текстовым файлом. Пример
Подсчет количества строк, начинающихся с #, в текстовом
файле t
k:=0;
reset(t);
while not eof(t) do {цикл по строкам}
begin
if not eoln(t) then {непустая строка}
begin
read(t,c);
if c= '#' then k:=k+1
end;
readln(t) {пропускаем оставшиеся символы строки}
end
17
Файлы input и output
input – стандартный файл ввода
output – стандартный файл вывода
{
var input, output : text;
reset(input);
rewrite(output);
}
Сокращенная запись:
read(x) = read(input, x)
readln = readln(input)
write(x)= write(output,x)
writeln = writeln(output)
18
Расширенные возможности чтения и записи
для текстовых файлов
var t : text;
Ввод
read(t,x) x - char, integer или real
read(t,x1,...,xn) = read(t,x1);...;read(t,xn)
readln(t,x1,...,xn) = read(t,x1,...,xn);readln(t)
Вывод
write(t,p)
p - это e, e:m или e:m:n
e – выражение типа char, boolean, integer или real,
либо строка
m – ширина поля вывода
n – количество цифр в дробной части результата e
write(t,p1,...,pn) = write(t,p1);...;write(t,pn)
writeln(t,p1,...,pn) = write(t,p1,...,pn);writeln(t)
19
Внутренние и внешние файлы
Внутренние файлы существуют только во время выполнения
программы: появляются в начале ее работы и уничтожаются при
выходе их нее
20
Пример работы с текстовыми файлами
var А, B: text; Переписать содержимое файла А в файл В с
сохранением деления на строки
begin {Free Pascal – использует assign и close }
assign(А,’one.txt’); assign(B,’two.txt’);
reset(А); rewrite(B);
while not eof(A) do
if eoln(A) then
begin
readln(A);
writeln(B)
end
else
begin
read(A,c); {c:char}
write(B,c)
end;
close(A); close(B) 21
end.