close

Вход

Забыли?

вход по аккаунту

?

Теория файлы

код для вставкиСкачать

ФАЙЛЫ
Текстовый файл
Текстовый файл - это структра данных, размещенная на внешнем носителе, элементом которой является символ. Текстовый файл может содержать символы управления: конец строки, перевод каретки, конец файла. Последовательность символов, заканчивающаяся символом конец строки, называют строкой текстового файла. Файл организован последовательно, то есть новый элемент добавляется всегда в конец файла. Для доступа к элементам файла, в программе, следует объявить файловую переменную.
Объявление файловой переменной
Определение файловой переменной
Var
Имя файловой переменной: TextFile;
Файловая переменная является ссылкой на область дисковой памяти, где расположен физический файл. Операции над текстовым файлом
1) Назначение файловой переменной физического файла
Связь файловой переменной с файлом устанавливается с помощью процедуры Assingfile.
Формат процедуры:
Assingfile(файловая переменная, имя файла);
Имя файла - это параметр, тип которого string. Имя файла создается по правилу операционной системы. Если файл находится в одной папке с программой, то достаточно указать только имя файла, в противном случае надо указать полный путь к файлу, например: D:\User\lab\A.txt. Когда связь с файлом установлена, его можно открыть для ввода или вывода информации.
Примеры связывания файла с файловой переменной :
Var
F: textfile;
Filename: String;
Begin
//Имя файла задано непосредственно в вызове процедуры Assignfile (F,'A.txt');
//Имя файла вводит пользователь в переменную Filename.
Assignfile (F,Filename);
End.
2) Открытие файла для чтения
Существующей текстовый файл можно открыть только для чтения с помощью процедуры Reset. Формат процедуры Reset( файловая переменная );
Открытие файла означает: разрешить доступ к данным связанного с файловой переменной физического файла. После открытия файла, операции чтения доступен первый компонент файла, т.е. текущая позиция в файле устанавливается на начало файла. После открытия данные файла можно читать. Если файловая переменная связана с несуществующем файлом, то система выдаст прерывание - Файл не существует.
Если открывается уже открытый файл, то он сначала закроется, а затем вновь откроется. Пример процедуры открытия файла для чтения: Reset(F);
3)Открытие файла для записи (создание нового файла)
Осуществляется процедурой Rewrite. Процедура rewrite создает новый внешний файл, имя которого связанно с файловой переменной. Если внешний файл с указанным именем уже существует, то он удаляется и на его месте создается новый пустой файл и для операции записи доступен первый символ. Текущая позиция файла устанавливается на начало файла. В текстовый файл, открытый процедурой Rewrite возможна только запись данных.
Формат процедуры Rewrite(файловая переменная );
Пример создания нового файла с именем B.txt в текущей папке:
Assignfile(F,'B.txt');
Rewrite(F);
3) Открытие файла для добавления новой записи Текстовый файл - это файл с последовательной организацией, поэтому новая запись может быть добавлена в конец файла, после последней записи. Для перемещения указателя файла в конец файла используется процедура Append. В файл, открытый процедурой Append можно производить только запись данных.
Формат процедуры Append(Файловая переменная);
Пример открытия существующего файла B.txt для добавления новых записей:
Assignfile(F,'B.txt');
Append(F);
4) Вывод данных в текстовый файл
Вывод данных в текстовый файл может быть выполнен процедурами write и writeln.
Форматы процедур ввода данных в файл:
Write (Ф.п, список выражений);
Writeln(Ф.п, список выражений);
Writeln(Ф.п.);
Список выражений может содержать: переменные, константы, сложные выражения. Значение списка будут записаны в текстовый файл в символьном формате, например, число 123 будет записано как последовательность из 3 символов.
Процедура writeln после вывода в файл значений списка выражений запишет в файл маркер конца строки включающий символы #13(символ конца строки) и #10(перевод каретки на новую строку).
Процедура Writeln(Ф.п.) записывает в файл только маркер конца строки.
Пример использования процедур вывода данных в файл
Var F:Textfile;
Begin
Assignfile(F,'A.txt');
Rewrite(F);
Write(F,125, );
Write(F,126,  );
Writeln(F);
Writeln(F,127);
End.
Содержимое файла A.txt после выполнения программы 125 126 #13#10127#13#10
5)Чтение данных из файла
Чтение данных из текстового файла осуществляется процедурами Read или Readln.
Форматы процедур Read(Ф.п., Список переменных);
Readln(Ф.п., Список переменных);
Readln(Ф.п.);
При чтении данных из текстового файла автоматически происходить преобразование прочитанных данных из символьного формата в формат соответствующей переменной. Для корректного чтения, данные должны быть правильно подготовлены: * Числовые данные должны отделяться от других данных символами пробел или Enter или табуляцией.
* Символьная информация должна следовать без разделителей за числовой информацией.
* Если в файле должна храниться информация различных типов, то ее лучше располагать на различных строках.
Процедура Read читает данные из файла и записывает их в переменные, но маркер конца строки не читает. Readln читает данные и читает маркер конца.
Пример чтения данных из текстового файла.
Пусть файл A.txt содержит данные 125 126 #13#10127#13#10
//код программы
Var F:Textfile;
A,B,C:integer;
Begin
Assignfile(F,'A.txt');
Reset(F);
Readln(F,A,B);
Readln (F,C);
Writeln(A,' ',B,' ',C)
End.
В результате на монитор будут выведены значения: 125 126 127
6) Закрытие файла
Данная операция прекращает доступ к данным. Освобождает буфер файла.
Формат команды.
Closefile(Ф.п.);
Пример использования:
Var F:Textfile;
A,B,C:integer;
Begin
Assignfile(F,'A.txt');
Reset(F);
Readln(F,A,B);
Readln (F,C);
Closefile(F);
Writeln(A,  , B,  , C)
End.
7) Проверка существования файла
Перед открытием файла для чтения или при создании нового файла следует проверить файл на существование и обработать результат проверки.
Способы:
* Использование функции ioresult которая возвращает результат операции открытия файла. Если файл открылся, то функция вернет 0, иначе - код прерывания (число больше 0 ). При использовании функции ioresult следует использовать директиву компилятора {$I+/-}.
Пример использования функции
Begin
Assignfile(F,'A.txt');
{$I-}//отключить контроль над операциями ввода/вывода Reset(F);
{$I+}//включить контроль над операциями ввода/вывода.
If ioresult = 0 then Обработка данных файла.
End.
* Использование функции FileExists(имя внешнего файла).
Функция возвращает true если файл, имя которого указано в вызове функции, существует. В противном случае функция возвращает false.
var
F:textFile;
begin
Assignfile(F,'A.txt');
if FileExists('A.txt') then
begin
Reset(F);
writeln('существует ');
end
else
writeln(' Не существует ');
Readln
end.
8) Обнаружение символа - конец файла
В текстовом файле количество компонентов может быть заранее неизвестно. Чтобы обработать все компоненты файла необходимо найти символ - конец файла (код 26). Для нахождения этого символа в языке Pascal используется функция Eof(Ф.п.):boolean, которая возвращает значение true если следующий читаемый символ - символ конца строки, в противном случае функция возвращает значение false.
Пример использования функции Eof.
Пусть текстовый файл A.txt содержит последовательность целых чисел разделенных пробелами. Вывести на монитор все числа.
Var F:Textfile;
A:integer;
Begin
Assignfile(F,'A.txt');
if FileExists('A.txt') then
begin
Reset(F);
While not Eof(F) do
Begin
Read(F,A);
Writeln(A);
end
end
else
writeln('Файл не существует ');
Closefile(F);
End.
9) Проверка конца строки файла
Для обнаружения символа конца сроки используется функция Eoln(Ф.п.):Boolean, которая возвращает true если следующий читаемый символ- символ конца строки и false в противном случае.
Пример использования
Пусть файл хранит последовательность чисел. Числа расположены в нескольких строках текстового файла. Количество чисел в строке неизвестно.
Var F:Textfile;
A:integer;
Begin
Assignfile(F,'A.txt');
if FileExists('A.txt') then
begin
Reset(F);
While not Eof(F) do
While not Eoln(F) do
Begin
Read(F,A);
Writeln(A);
End;
Readln(F);
end
else
writeln('Файл не существует ');
Closefile(F);
End.
Типизированный файл
Типизированный файл - это файл, в котором записаны идентичные структуры. Типизированный файл можно создать только программным путем. Он состоит из записей фиксированной длины. Содержимое файла - это машинное представление данных. Типизированные файлы так же называют двоичными т.к. они содержат информацию в двоичном коде. С каждым типизированным файлом связана переменная - указатель. Указатель определяет смещение от начала файла в количестве прочитанных или записанных записей. При открытии файла значение указателя равно нулю, т.е. не выполнено ни одной операции ввода/вывода. Если только одна запись записана или прочитана, то значение указателя равно единице. Формат объявление файловой переменной
Var
Имя ф.п.: file of Тип записи файла;
Тип записи это любой тип языка Pascal кроме файлового.
Операции над типизированным файлом
1) Назначение файловой переменной физического файла
Это связывание файловой переменной с файлом. Осуществляется аналогично связыванию для текстовых файлов. Связь файловой переменной с файлом устанавливается с помощью процедуры Assingfile.
Формат процедуры:
Assingfile(файловая переменная, имя файла);
2) Создание файла
Создание типизированного файла осуществляется процедурой Rewrite(Ф.п.).
Пример Var
F: file of integer;
Begin
Assignfile(F,'A.Dat');
Rewrite(F);
End.
После выполнения программы в текущей папке появится файл A.dat. При открытии существующего файла процедурой Rewrite (файловая переменная ) файл удаляется. Открытый этой процедурой файл допускает выполнение операции чтения и записи.
3) Открыть существующий для чтения и записи
При открытии типизированного файла процедурой Reset(Ф.п.) данные файла доступны для чтения, но открытый таким образом файл допускает выполнение операции записи в файл.
4) Чтение данных из файла Осуществляется процедурой Read(Ф.п., Список переменных);
Переменные в списке должны быть того же типа что и тип файла.
Пример использования процедуры read
Var
F: file of integer;
A:integer;
B:real;
Begin
Assignfile(F,'A.Dat');
Reset(F);
Read(F,A);
Read(F,B); //Это будет ошибка т.к. тип переменной и файла различен.
End.
5) Записать в файл
Осуществляется процедурой Write(ф.п., список переменных);
Переменные в списке должны быть того же типа что и тип файла
Пример Var
F: file of integer;
A:integer;
B:real;
Begin
Assignfile(F,'A.Dat');
Rewrite(F);
A:=5;
Write(F,A);
End.
6) Закрытие файла Осуществляет процедура Closefile(Ф.п.). После выполнения этой операции доступ к данным файла невозможен, но связь файловой переменной и с физическим файлом сохраняется. 7) Определение количества записей в файле.
. В типизированных файлах не рекомендуется использовать функцию Eof. При обработке всех записей файла, следует использовать функцию Filesize(ф.п.):Longint, которая возвращает количество записей в файле.
Пример
Прочитать и вывести все записи файла.
Var
F: file of integer;
A,i:integer;
Begin
Assignfile(F,'A.Dat');
Reset(F);
For I:=1 to filesize(F)-1 do
Begin
Read(F,A);
Write(A,' ')
End;
End.
8)Определение позиции в типизированном файле
Осуществляет процедура filepos(Ф.п.):longint. Она возвращает номер записи в файле, к которой будет применяться операция ввода/вывода.
Пример Var
F: file of integer;
A:integer;
Begin
Assignfile(F,'A.Dat');
Reset(F);
Read(F,A);
Write(Filepos(F));//результат равен 1( позиция первая )
End.
9) Организация прямого доступа
В типизированных файлах можно выполнять операции чтения и записи к записям с произвольным номером, не выходящим за количество записей файла. Эту операцию выполняет процедура Seek(Ф.п.,N). Ее действие: осуществляет перемещение указателя в позицию N. N - это значение целого типа.
Примеры использования процедуры
Seek(F,0);//Указатель перемещается в положение 0 т.е. доступна первая запись файла Seek(F,Filesize(F));//Переместит указатель в конец файла (за последнюю запись )
Seek(F,5);//Указатель установится перед пятой записью.
Пример открытия файла с помощью компоненты OpenDialog На рис.12. представлен проект формы, для демонстрации выполнения операции открытия файла с помощью OpenDialog.
Рис.12. Проект формы
Элемент управления Edit1 предназначен для отображения имени выбранного файла. Кнопка Открыть файл обеспечит выполнение операции открытия файла посредством элемента управления OpenDialog, который является не визуальным элементом, но в проекте формы представлен пиктограммой.
Обработчик кнопки Открыть файл
procedure TForm1.Button1Click(Sender: TObject);
begin
with OpenDialog1 do
begin
if not Execute then Exit; //размещение диалогового окна
//если окно открылось можно использовать переменную FileName
//в которую система поместила имя выбранного файла
Edit1.text:=FileName;
end
end;
При выполнении операции Открыть файл откроется диалоговое окно выбора файла, вид которого представлен на рис.13. После выбора файла и щелчка по кнопке Open, окна выбора файла, имя файла запишется в переменную OpenDialog1.filename и согласно алгоритма обработчика кнопки Открыть файл оно отобразится в элементе формы Edit1.
Рис.13. Окно выбора файла
На рис.14. отображена форма после выполнения операции.
Рис.14. Отображение в форме имени открытого файла
Примеры подпрограмм по обработке файлов
Unit Unit1;
interface
const
line='-----------------------------------------------------------------------';
type //струтура записи типизированного файла
tkassa=record
nomer:word;
FIO:string[20];
num:word;
sum:real;
data:string[10];
end;
ttxt=textfile;//тип для текстового файла
ttype=file of tkassa; //тип для типизированного файла из записей tf=file of integer;//типизированный файл из целых значений
//создание типизированного из текстового
procedure create_tf(var f1:ttxt; var f2:ttype);
//поиск в типизированном файле procedure search(var f2:ttype;fam:string);
//вставка записи в середину тип. ф.
procedure insert_mid(var f2:ttype; x:tkassa; s1:string);
//вставка перед первой записью procedure insert_first(var f2:ttype; x:tkassa; s1:string);
//вставка в конец файла procedure insert_end(var f2:ttype; x:tkassa);
//вывод файла procedure out(var f2:ttype);
//удаление из записи по указанной позиции
procedure delete_pos (var f2:ttype; pos:integer);
implementation
procedure create_tf(var f1:ttxt; var f2:ttype);
var
w: tkassa;
begin
reset(f1);
rewrite(f2);
while not eof(f1) do
begin
readln(f1,w.nomer);
readln(f1,w.FIO);
readln(f1,w.num);
readln(f1,w.sum);
readln(f1,w.data);
write(f2,w);
end;
closefile(f1);
closefile(f2);
end;
procedure insert_first(var f2:ttype; x:tkassa; s1:string);
var
f3:ttype;
i:integer;
begin
assignfile(f3,'tmp.doc');
rewrite(f3);
write(f3,x);
reset(f2);
for i:=1 to filesize(f2) do
begin
read(f2,x);
write(f3,x);
end;
closefile(f2);
closefile(f3);
erase(f2);
rename( f3, s1);
end;
procedure insert_mid(var f2:ttype; x:tkassa; s1:string);
var
f3:ttype;
i:integer;
x1:tkassa;
begin
assignfile(f3,'tmp.doc');
rewrite(f3);
reset(f2);
for i:=1 to filesize(f2)div 2 do
begin
read(f2,x1);
write(f3,x1);
end;
write(f3,x);
for i:=filesize(f2)div 2+1 to filesize(f2) do
begin
read(f2,x);
write(f3,x);
end;
closefile(f2);
closefile(f3);
erase(f2);
rename( f3, s1);
end;
procedure insert_end(var f2:ttype; x:tkassa);
var
f3:ttype;
i:integer;
x1:tkassa;
begin
reset (f2);
seek(f2, filesize(f2));
write(f2, x);
closefile(f2);
end;
procedure out(var f2:ttype);
var
x:tkassa;
i:integer;
begin
reset(f2);
writeln;
shapka;
for i:=1 to filesize(f2) do
begin
read(f2,x);
writeln ('| ', x.nomer:6,' | ',x.FIO:7,' | ',x.num:16,' | ',x.sum:9,' | ',x.data:6,' |');
end;
closefile(f2);
end;
procedure delete_pos (var f2:ttype; pos:integer);
var
i:integer;
x:tkassa;
begin
reset(f2);
if pos<=filesize(f2) then
begin
for i:=pos to filesize (f2)-1 do
begin
seek (f2, i);
read(f2,x);
seek(f2, filepos (f2)-2);
write(f2,x);
end;
seek(f2, filesize(f2)-1);
truncate(f2);
closefile(f2);
end;
end;
procedure writey(var x:tkassa);
var
y:real;
begin
writeln('Vvedite nomer kassi');
readln (x.nomer );
writeln('Vvedite FIO');
readln (x.FIO );
writeln('Vvedite kol-vo');
readln (x.num );
writeln('Vvedite stoimost bileta');
readln (y );
x.sum:=y*x.num;
writeln('Vvedite daty');
readln (x.data );
end;
procedure search(var f2:ttype;fam:string);
var
x:tkassa;
k,i:integer;
begin
reset(f2);
k:=0;
for i:=1 to filesize (f2) do
begin
read(f2, x);
if x.FIO=fam then
begin
if k=0 then
shapka;
k:=k+1;
writeln ('| ', x.nomer:6,' | ',x.FIO:7,' | ',x.num:16,' | ',x.sum:9,' | ',x.data:6,' |');
end;
end;
if k=0 then
writeln ('Takix kassirov net');
end;
procedure vivf(var f:tf);
var i,x:integer;
begin
writeln;
reset(f);
for i:=1 to filesize (f) do
begin
read(f,x);
write(x,' ');
end;
closefile(f);
Reset(f);
end ;
end.
Документ
Категория
Рефераты
Просмотров
32
Размер файла
216 Кб
Теги
файл, теория
1/--страниц
Пожаловаться на содержимое документа