Мы все время рассматривали задачи, в которых данные поступают с клавиатуры, а результаты выводятся на экран. Ни исходные данные, ни результаты не сохраняются. А если данных слишком много? Как записать их на диск? Для этого необходимо исходные данные и результаты оформить в виде файлов, которые хранятся на диске.
Файлы – это поименованная структура данных на техническом носителе, представляющая собой последовательность элементов (записей) одного типа или - это массив переменной длины неограниченного размера.
Файл может быть компонентом другой структуры, но не должен входить в другой файл.
Отличие файла от массива: размещение на внешнем носителе, длина файла не задается, место элемента не определяется индексом.
Файлы бывают:
- типизированные
- нетипизированные
- текстовые
Файл объявляется в разделе описания переменных с указанием типа элементов файла.
Например:
Var F1: file of integer; F2: file of char; F3: text; F4: file;
Типизированнымифайлами называются файлы, в описании которых присутствует указание типа. Типизированные файлы – это файлы с прямым доступом к компонентам (записям).
Нетипизированныйфайл – это просто последовательность байтов, без конкретизации структуры.
Файл, компонентами которого являются данные символьного типа, называется текстовым. Отличие текстовых файлов от типизированных - наличие строковой структуры. В текстовые файлы можно записывать любую информацию, в том числе числа. При этом они (числа) автоматически преобразуются в строковые величины, а при считывании из файла – обратное преобразование в числа.
Описание файлов:
Тип файла
Описание файла
Типизированный
Var F1: file of integer;
F2: file of char;
Нетипизированный
Var F3: file;
Текстовый
Var F: text;
Файл на техническом носителе определяется полным именем (<путь>\<собственно имя>.<расширение>). Для обозначения файла и работе с ним в программе используется файловая переменная.
Файловая переменная - это переменная, используемая в программах для обозначения файла и обращения к нему. Она не может использоваться как обычная переменная (слева от знака присваивания, в логических и арифметических выражениях).
Особенности файловой переменной:
1. Ей нельзя присваивать какие-либо значения
2. Она не может участвовать в логических операциях
3. Она не может входить в математические выражения
При работе с файлом используется понятие указателя или индекса файла, т.е. положение магнитной головки в определенном месте файла. Перед началом работы файл должен быть создан или открыт, по окончании работы – закрыт.
При работе с файловыми переменными, используются специальные процедуры и функции:
Процедура
Назначение
Замечание
Assign(f, ‘name’)
Связывает файловую переменную с конкретным файлом (привязывает переменную к имени файла). Ставится перед первым использованием файловой переменной.
Можно имя файла ’name’ задавать через строковую переменную (S): Assign(f, S)
Reset(f)
Открывает существующий файл и устанавливает указатель на начало записи.
Для любых файлов
Rewrite(f)
Создает новый пустой файл, устанавливает указатель - на начало файла. Если файл существовал, то его содержимое уничтожается.
Для любых файлов
Close(f)
Закрывает открытый файл
Для любых файлов
Erase(f)
Стирает предварительно закрытый файл
Для любых файлов
Rename(f, f1)
Переименовывает файл f в файл f1. Файл f должен быть предварительно закрыт
Для любых файлов
EOF(f)
Получение сведений о конце файла True, если указатель указывает на метку конца файла, иначе - False
Логическая функция.
Read(f,v1,…vn)
Считывает записи из файла f в переменные v1, …vn
Для типизированных и нетипизированных файлов
Write(f,v1,…vn)
Записывает в файл f значения переменных v1,…vn
Для типизированных и нетипизированных файлов
Readln(f,v1,…vn)
Считывает записи из файла f в переменные v1, …vn
в типизированных файлах недопустимо
Writeln(f,v1,…vn)
Записывает в файл f значения переменных v1,…vn
в типизированных файлах недопустимо
N:=filesize(F);
Определение количества записей в файле
Функция
Eoln(f)
True, если указатель на метке конца строки, иначе - False
Логическая функция. Для текстовых файлов
Append(f)
Открывает файл и устанавливает указатель на метку конца файла
Применяется для добавления записей
N:=filepos(f)
Выдает номер записи, на которую указывает указатель записи. Первая запись имеет номер 0.
Функция
seek(f,n)
Устанавливает указатель на запись с номером n
truncate(f)
Отсекает все записи, находящиеся после указателя и в этой позиции записывает метку конца файла.
§ Считывание из текстового файла (см программу выше):
uses crt;
var f:text; r,i:integer; rr:string;
begin
clrscr;
assign(f,'dddddd');
reset(f);
readln(f,rr);
writeln(rr);
for i:=1 to 20 do begin
readln(f,r);
writeln(r); end;
close(f);
end._
· Написать программу, вычисляющую корни квадратного уравнения и вывести результаты в файл.
Uses crt;
Var a,b,c,x1,x2, d: real; f:text;
Begin
Assign(f,’result.txt);
Rewrite(f);
Readln(a,b,c);
D:=b*b-4*a*c;
If d>=0 then
Begin
X1:=-b+sqrt(d)/(2*a);
X2:=-b-sqrt(d)/(2*a);
End;
Writeln(‘решени квадратного ур-я’);
Writeln(f,'a=',a:6:3,'b=', b:6:3,'c=',c:6:3);
If d<0 then writeln(f,’у урав-я нет корней’) else writeln(f, ‘корни: x1=’, x1:6:3,’x2=’, x2:6:3);
Close(f);
Writeln(‘рез-ты работы программы в файле result.txt’);
Repeat until keypressed; end.
· На диске имеется файл с именем Karl.txt, в котором записана скороговорка:
"Карл у Клары украл кораллы, Клара у Карла украла кларнет."
Требуется подсчитать кол-во букв «К»
Uses crt;
Var f:text; s:integer; a:char;
Begin
Assign(f,’Karl.txt’); Reset(f);
S:=0;
While not eof(f) do Begin
While not eoln(f) do Begin
Read(f,a); If a=’k’ then s:=s+1;
End;
Readln(f);
End;
Close(f); Writeln(s);
Repeat until keypressed; end.
· Ввести текст в текстовый файл f1. Переписать файл f1 в f2 – первую половину файла в прямом, а вторую – в обратном порядке следования символов.
Uses crt;
Var f1,f2:text; s,s1,sa,sb:string; a:char; n,y,i:integer;
Begin
Clrscr;
Assign(f1,’file1’); Assign(f2,’file2’);
Rewrite(f1);
Readln(s); Writeln(f1,s); Close(f1);
Reset(f1); Rewrite(f2); Read(f1,s1);
N:=lenght(s1); Y:=n div 2; Writeln(y);
Sa:=’’; sb:=’’;
For i:=n downto y+1 do Sa:=sa+s1[i];
Writeln(sa);
For i:=1 to y do Sb:=sb+s1[i];
Writeln(sb);
S1:=sb+sa;
Writeln(s1); Write(f2,s1);
Close(f1); Close(f2); Repeat until keypressed; end.
Приложение 1. Структура типов данных
Типы данных
простые
порядковые
целые
вещественные
логические
структурированные
массивы
символьный
указатели
записи
перечисляемый
строки
множества
Тип-диапазон
процедурные
файлы
объекты
Приложение 2. Таблица кодов ASCII
Управляющие символы
Печатаемые символы
Код Клавиши Обозначение
Десятичный код - символ
0 Ctrl - @ NUL
1 Ctrl – A SOH
2 Ctrl – B STX
3 Ctrl – C ETX
4 Ctrl – D EOT
5 Ctrl – E ENQ
6 Ctrl – F ACK
7 Ctrl – G BEL
8 Ctrl – H BS
9 Ctrl – I HT
10 Ctrl – J LF
11 Ctrl – K VT
12 Ctrl – L FF
13 Ctrl – M CR
14 Ctrl – N SO
15 Ctrl – O SI
16 Ctrl – P DLE
17 Ctrl – Q DC 1
18 Ctrl – R DC 2
19 Ctrl – S DC 3
20 Ctrl – T DC 4
21 Ctrl – U NAK
22 Ctrl – V SYN
23 Ctrl – W ETB
24 Ctrl – X CAN
25 Ctrl – Y EM
26 Ctrl – Z SUB
27 Ctrl – [ ESC
28 Ctrl - \ FS
29 Ctrl - ] GS
30 Ctrl - ^ RS
31 Ctrl - _ US
64 @
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
91 [
92 \
93 ]
94 ^
95 _
‘
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
¦
}
~
.