Read(f,x);
write(f,’ ‘);
assign(f,’input.txt’);
reset(f) – для чтения
rewrite(f) – для записи
close(f);
rename(f,’output.txt’);
Erase(f) – delete
EOF – конец строки
Текстовые файлы
Дадим определение текстового файла. Текстовый файл – это файл в котором:
1) информация представляеться ASCII кодами
2) порции информации могут разделять на строки
3) признаком конца строки CR(#13) который может быть добавлен символом LF(#10)
4) конец файла ^z(#26)
5) при записи чисел и логических значений, они преобразуються в текстовый вид. При чтении чисел и строк они автоматически преобразуються из тестового в машинное.
Append(var f:text) – она приминима к существующим текстовым файлам тоесть этот файл не стираеться, как при выполнение Rewrite а открыаветься для дозаписи элемента в конец файла.
EOLn(var f:text) – принимает значение истина если текущая позиция конец строки или конец файла.
Program//выводит саму себя
Var
s:string;
f:text;
Begin
assign(f,’ex_27.pas’);
reset(f);
While not EOF(f) do
Begin
readln(f,s);
writeln(s);
end;
close(f);
end;
Типизированные файлы
File of < тип компонент > – т.е любой тип, кроме типа файл. При работе с файлом есть два этапа: создание и использование файла. Эти два этапа могут быть реализованы, как в разных программа так и в одной
Program ex_28;//создать файл целых чисел из диапозона m n
Var
i,m,n:integer;
f:file of integer;
Begin
assign(f,’Int.dat’);
rewrite(f);
write(‘M=’);readln(m);
write(‘N=’);readln(n);
for i:=m to n do
write(f,i);
close(f);
End.
IOResult – возварщаетусловный признак последней операции ввода вывода. Если опреация завершилась успешно то выдаст 0. Функйия IOResult доступна только при отключонном контроле ошибок ввода вывода {$I – } – off {$I+} – on автоконтроль. Если автоконтроль отключен, а операция ввода – вывода привела к ошибке, устанавливаеться флаг ошибки и последующие обрашения к вводу выводу блокируються пока не будет вызвана функция IOResult.
Program ex_29;//по значениям целых чисел из файла int.dat получить вещественный файл //Re.dat удваивая каждую компоненту
Var
k:integer;
x:real;
f:file of integer;
g:file of real;
Begin
assign(f,’Int.dat’);
{$I – }
reset(f);
{$I+}
if IOResult=0 then
Begin
assign(g,’re.dat’);
rewrite(g);
While notEOF(f) do
Begin
read(f,k);
x:=k*2.;
write(g,x);
end;
close(f);
close(g);
reset(g);
While notEOF(g) do
Begin
read(g,x);
write(x:6:1);
end;
writeln();
End
Else
Begin
writeln(‘Error:’,IOResult);
end;
End.
Некоторые коды ошибок ввода – вывода:
2 – файл 404
3 – путь 404
4 – слишком много открытых файл
100 – ошибка чтения диска, поптыка чтения из полностью прочитанного файла.
101 – ошибка записи на диск
102 – файлу не присвоено имя
103 – файл не открыт
Безтиповые файлы, операции ввода – вывода
Стандарт паскаля, вводит особый файловый тип являеться по сути, обобщенным файловым типом, который будем называть безтиповым файлом.
Var
f:file;
Безтиповый файл – это мощное средство обработки, так как позволяет манипулировать данными незадумываясь об их типе. С его помощью можно записывать на диск произвольные участки оперативной памяти и считываться их с диска. Можно так – же преобразовывать данные безтипового файла в любой формат посредствам приведения типов. Ввод – вывод для безтиповых файлов осуществляеться специальными процедурами: BlockRead and BlockWrite. Кроме этого расширяеться синтаксис процедур:
ReSet(var f:file; BufSize:word);
ReWrite(var f:file; BufSize:word);
BufSize – задает число байтов, обрабатываемых за одно обращения, чем больше тем лучше. Минимальный блок который может быть записан или прочитан 1 байт. Максимальный размер 64к.
Последовательный и прямой доступ к файлу.
Естественный доступом к компонентам файла, являеться последовательный. Короче как массив. Однако реализован и прямой доступ, который дает возможность пазиционирования на требуемую запись.
херачим ресунок
Поскольку фактически пронумерованны не элементы файла, а гранцы между ними, реальный номер записи всегда на единицу больше чем номер границы перед ней. Следует учитывать, что границ между элементами нет, это чистая условность.
FileSize(var f:file):LongInt;//возврашает числа записей или блоков в файле f.
FilePos(var f:file):LongInt;//возврашает номер записи в открытом файле f, предшествуюшей той, которая будет считана или записана последующей операцией ввода – вывода.
Seek(var f:file;n:LongInt);// устанавливает текушей записью в файле f компоненту с номер N
Truncate(var f:file);//отсекает часть файла начиая с той позиции, которая была бы считанна последующей операцией.
Эти процедуры не применимы к текстовым файлам.
Пример.
Дан файл целых чисел, удалить компненту с заданным номером. Вставить новый элемент в конец файла
Program std;
Type
TEL=integer;
TFile=file of TEL;
Var
l:integer;
f:Tfile;
Procedure Out_File(var g:TFile);
Var
x:TEL;
Begin
reset(g);
While not EOF(g) do
Begin
read(g,x);
write(x:3);
end;
writeln();
end;
Procedure Ins_Field(var g:TFile; R:TEL);
Begin
Seek(g,FileSize(g));
write(g,R);
end;
Procedure DelField(var g:TFile; k:integer);
Var
N,i:Integer;
x:TEL;
Begin
N:=FileSize(g);
if k<=N then
Begin
for i:=k to N – 1 do
Begin
seek(g,i); read(g,x);
seek(g,i – 1); write(g,x);
end;
truncate(g);
end;
end;
procedure MakeFile(var f:TFile);
Begin
rewrite(f);
write(f,1,2,3,4,5);
close(f);
end;
Begin
assign(f,'in.txt');
MakeFile(f);
reset(f);
Out_File(f);
DelField(f,2);
Out_File(f);
close(f);
End.
Модули
Модуль Unit в турбопаскале – это специальным образом оформленная библиотека определений, типов, констант, переменных, а так – же процедур и функций. Модули в отличии от программы не может быть запущен на выполнение самостоятельно он может только учавствовать для построения программы или другого модуля. В отличии от фрагментов текстов программ подключаемых к программе при компиляции дерективы {$I имя файла} модуль предварительно компилируться независимо от программы.
Результат компиляции модуля являеться файл с расширением.TPV. Для подключения модуля к программе его имя необходимо указать в дерективе Uses.
При программирование возможность модульного построения особенно полезно при создании собственных библиотек, процедур и функций, которые в последствии могут подключаться к разным программам, не требуя никаких переделок.
Общая структура модуля:
Unit имя модуля
Interface {начало раздела объявлений}
Uses …//раздел поключений других модулей
Сonst
Type
Var