Процедуры для работы с файлами




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



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-13 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: