Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Работа с файлами в Delphi




Поименованная область памяти на внешнем носителе (диске) называется файлом. У любого файла есть имя. Информация, которая хранится в файле, представляет собой множество элементов одного типа. Размер файла, как правило, ограничен только емкостью устройства, на котором он хранится, что позволяет обрабатывать большие объемы информации.

Способ объявления файла зависит от его типа. Различают три типа файлов:

текстовые;

типизированные;

нетипизированные.

Текстовый файл, состоит из последовательности любых символов. Символы образуют строки, каждая из которых заканчивается символом «конец строки». Конец самого файла обозначается символом «конец файла». При записи информации в текстовый файл, все данные преобразуются к символьному типу и хранятся в таком виде. Просмотреть текстовый файл можно с помощью любого текстового редактора.

Описание текстового файла:

var имя_переменной: TextFile;

Типизированный файл состоит из элементов одного типа, число которых заранее не определено и может быть любым. Он так же заканчивается символом «конец файла». Данные в типизированном файле хранятся в двоичных кодах и не просматриваются текстовыми редакторами. Объявление таких файлов имеет вид:

var

имя_переменной: file of тип;

В нетипизированных файлах информация считывается и записывается в виде блоков определенного размера, в них могут храниться данные любого вида и структуры. Описание нетипизированного файла:

var имя_переменной: file;

Для доступа к файлам используют специальную файловую переменную.

Например:

var

a:TextFile;

c:file of integer;

F:file;

Для связи файловой переменной с файлом на диске примняют процедуру:

AssignFile(переменная, имя_файла);

здесь переменная – имя переменной любого файлового типа, имя_файла – строка символов, содержащая полное имя файла (если путь к файлу не указан, подразумевается, что он находится в текущем каталоге).

Например:

Var

T:TextFile;

f:file of real;

S:string;

begin

S:=’text.txt’;

assign (t,S);

assign (f,’d:\tp\tmp\abc.dat’);

Для открытия существующего файла используют процедуру:

Reset(файловая_переменная);

После открытия файла доступен его первый компонент.

Для создания нового файла или удаления информации из существующеего применяют процедуру:

Rewrite(файловая_переменная);

После выполнения различных операций файл должен быть закрыт. Для этого применяют процедуру

CloseFile(файловая_переменная);

Запись данных в текстовый файл осуществляется процедурами

Write(переменная, список_выражений);

или

Writeln(переменная,список_выражений);

где список_выражений – выражения символьного, целочисленного, вещественного, строкового или логического типов, которые будут записаны в файл, связанный с файловой переменной.

Процедура Writeln в конце каждой строки добавляет символ «окончание строки».

ПРИМЕР. Подпрограмма, которая создает на диске D файл abc.txt и записывает в него таблицу умножения.

procedure TForm1.Button1Click(Sender: TObject);

var f:TextFile; i,j:byte;

begin

assignFile(f,'d:\abc.txt');

rewrite(f);

for i:=2 to 9 do

begin

for j:= 2 to 9 do

write(f,i,'*',j,'=',i*j,' ');

writeln(f);

end;

CloseFile(f);

end;

 

Чтение данных из файла осуществляется последовательно от начала файла процедурой

Read(переменная,список_переменных);

или

Readln(переменная,список_переменных);

здесь в списоке_переменных перечисляются переменные, в которые будут записаны данные прочитанные из файла, связанного с файловой переменной.

Процедура Readln после чтения из файла очередного элемента переходит к следующей строке.

ПРИМЕР. Разместим на форме кнопку «Читать из файла» и компонент Memo1.

Обращение к следующей подпрограмме приведет к тому, что на форме в окне редактирования появится текст из файла D:\abc.txt:

procedure TForm1.Button1Click(Sender: TObject);

var

f1:TextFile;

a:string; i:integer;

begin

AssignFile(f1,'D:\abc.txt');

reset(f1);

for i:=1 to 8 do

begin

readln(f1,a);

Memo1.Lines.Add(a);

end;

CloseFile(f1);

end;

 

Для типизированных файлов так же применимы процедуры чтения и записи

Read(переменная,список_переменных);

Write(переменная,список_выражений);

только типы выражений при записи и чтении должны соответствовать объявленному типу файла. Процедуры Writeln и Readln к типизированным файлам не применяют.

Для перемещения по типизированному файлу используют процедуру:

Seek(переменная, номер);

Эта процедура позволяет перейти к элементу с указанным номером, то есть осуществляет прямой доступ к компонентам файла. При прямом доступе компоненты файла нумеруются от 0 до n-1, где n – число компонентов в файле.

Так же для прямого доступа к компонентам типизированного файла можно применять функции:

filesize(переменная) – возвращает число реальных компонентов в открытом файле, связанном с файловой_переменной (для пустого файла функция вернет 0);

filepos(переменная) – возвращает значение текущей позиции в открытом файле, связанном с файловой переменной (если файл только что открылся, то функция вернет ноль, после прочтения последнего компонента из файла значение функции совпадает со значением filesize, что указывает на достижение конца файла).

Процедура Seek и функции filesize и filepos с текстовыми файлами не работают. Следующие подпрограммы работают как с типизированными, так и с текстовыми файлами:

Rename(переменная,имя_файла)

переименовывает закрытый файл, связанный с файловой переменной, в соответствии с именем указанным в строке имя файла;

Erase(переменная) – удаляет закрытый файла, связанный с файловой переменной;

Eof(переменная) принимает значение истина (true), если достигнут конец файла, связанного с файловой_переменной, и ложь (false) в противном случае;

ПРИМЕР. Подпрограмма, приведенная ниже, работает так. Открывается вещественный файл d:\abc.dat и в него записывается определенное количество вещественных чисел, вычисленных по формуле. Просмотреть созданный файл не возможно, так как информация в нем представлена в двоичных кодах.

procedure TForm1.Button1Click(Sender: TObject);

var

f:file of real;

a:real;

i,n:integer;

begin

AssignFile(f,'d:\abc.dat');

rewrite(f);

n:=StrToInt(Edit1.Text);

for i:=1 to n do

begin

a:= sqr(i)/sqrt(i);

write(f,a);

end;

CloseFile(f);

end;

Чтобы убедиться, что запись в файл d:\abc.dat произошла успешно, выведем его значения в окно редактирования:

procedure TForm1.Button1Click(Sender: TObject);

var

f1:file of real;

a:real;

begin

AssignFile(f1,'D:\abc.dat');

reset(f1);

while not eof (f1) do

begin

read(f1,a);

Memo1.Lines.Add(FloatToStr(a));

end;

CloseFile(f1);

end;

 

ЗАДАЧА. На диске Е есть файл целых чисел аbc.int, поменять местами его максимальный и минимальный элементы.

Приведенная далее программа работает так. Компоненты файла считываются в массив. Элементы массива выводятся в поле Memo1. Затем происходит поиск минимального и максимального элементов массива и их индексов. Максимальный и минимальный компоненты перезаписываются в файл на соответствующие позиции.

В заключении элементы преобразованного файла выводятся в поле Memo2.

procedure TForm1.Button1Click(Sender: TObject);

var

f:file of integer;

a:array [0..20] of integer;

i,nmax,nmin:byte; max,min:integer;

begin

AssignFile(f,'e:\abc.int');

reset(f);

for i:=0 to filesize(f)-1 do

begin

read(f,a[i]);

Memo1.Lines.Add(FloatToStr(a[i]));

end;

max:=a[0]; nmax:=0;

min:=a[0]; nmin:=0;

for i:=1 to filesize(f)-1 do

begin

if a[i]>max then

begin

max:=a[i];

nmax:=i

end;

if a[i]<min then

begin

min:=a[i];

nmin:=i

end;

end;

seek(f,nmax);

write(f,min);

seek(f,nmin);

write(f,max);

for i:=0 to filesize(f)-1 do

begin

seek(f,i);

read(f,a[i]);

Memo2.Lines.Add(FloatToStr(a[i]));

end;

CloseFile(f);

end;






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных