Лекция №8: Особенности использования файловых типов в Delphi
Текстовые файлы Delphi описываются с помощью служебного слова TextFile. Они представляют собой последовательность символов, сгруппированные в строки произвольной длины. Каждая строка заканчивается символом конца строки.
EOLN(end of line)
CR
13-#13
В Delphi примером текстового файла являются все файлы с расширением *.dpr. Ввод данных из произвольного текстового файла можно осуществлять известными нам процедурами read и readln с разницей, что в качестве параметров процедуры на первом месте идет имя файла read(f1,x1,x2) readln(f2,x,z)
Процедура readln(f2,x,z) осуществит чтение из файла, связывает с файловой переменной f2 значения переменных x и z.
Вывод данных в произвольный текстовый файл производится с использованием write и writeln, у которых первым параметром в списке указана соответствующая файловая переменная Writeln(F1,’S=’,S) осуществляет вывод файла, связанного с F1 символьной строкой S= и значения переменной S. Writeln(f1) – осуществляет вывод файла в пустую строку.
Функции, предназначенные для работы с текстовыми файлами.
1) Function E OF (var F: TextFile): Boolean;
Функция, возвращающая значения True, если достигнут конец файла, связанного с переменной F . В противном случае возвращающее значение False.
2) Function E OLN (var F: TextFile): Boolean;
True – если достигнут конец строки
False – в противном случае
3) Function SEEKEOF (var F: TextFile): Boolean;
Действует аналогично первому, но пробелы, знаки табуляции и маркеры конца строки пропускаются.
Используя подобные функции можно организовать ввод массивов из файла.
Составить программу для нахождения суммы двух квадратных матриц произвольного размера. Ввод исходных данных осуществить из текстового файла Input.txt , вывод результата произвести в файл Result.txt .
A(n*n), B(n*n), C(n*n). Cij = Aij + Bij
Program ….;
{+AppTypeConsole}
Uses SysUtils;
type mas=array of integer;
var
a,b,c:mas;
g1,g2,n,i,j:integer;
f1,f2:TextFile;
begin
*Assign File(f1,'input.txt');
*Assign File(f2, 'result.txt');
Reset(f1);
Rewrite(f2);
readln(f1,n);
SetLength(a,n,n);
SetLength(c,n,n);
g1:=0;
g2:=n-1;
for i:= g1 to g2 do
begin
for j:= g1 to g2 do
read(f1,a[i,j]);
readln(f1);
end;
for i:= g1 to g2 do
begin
for j:= g1 to g2 do
read(f1,b[i,j]);
readln(f1);
end;
CloseFile(f1);
for i:= g1 to g2 do
for j:= g1 to g2 do
c[i,j]:=a[i,j]+b[i,j];
Writeln (f2,'Result array');
for i:=g1 to g2 do
begin
for j:=g1 to g2 do
write (f2,c[i,j]:2);
writeln(f2);
end;
CloseFile(f2);
Writeln('program terminated');
readln;
end.
Файлы исходных данных Input.txt и Result.txt находятся в текущем каталоге , в противном случае необходимо в этих процедурах (*) указать полный адрес файла.
Статические и динамические переменные
В программах, рассматриваемых в Object Pascal, до сегодняшнего дня пользователь имел дело с переменными, которые размещались в памяти по определённым правилам:
Память под глобальной переменной выделяется в процессе компиляции и эти переменные существуют в течении всего времени работы программы.
Для локальных переменных память выделяется при вызове подпрограммы, при выходе из нее (подпрограммы) память очищается, и значение локальных переменных теряется. Таким образом, выделение памяти происходит автоматически.
Переменные, память для которых выделяется описанным способом, называются статическими. Переменные, созданием и уничтожением которых управляет программист, называются динамическими. Динамическая память – это та оперативная память компьютера, которая выделяется для программы в процессе ее выполнения. Использование динамической памяти позволяет экономить ресурсы компьютера. Любая ячейка ОЗУ – bite характеризуется собственным адресом. Адреса переменных могут храниться в переменных специального типа – указателях. Указатели могут быть типизированными и не типизированными.
Типизированные указатели могут хранить адрес переменной определенного типа. Указатель описывается в разделе описания var.
- указывает на то, что переменная является указателем.
Var a,b: integer;
C: real;
A,b – указывают на адреса переменных целочисленного типа,
c – действительного типа.
Указателю может быть присвоено нулевое значение: a:=nul – не содержит ячейки памяти.
Память принято делить на слова (2 байта), двойные слова (4 байта) и полиграфы (16 байт). При работе с памятью используется адресация по схеме: база + смещения.
Адрес конкретного байта формируется из некоторого заданного байта, а база + расстояние до требуемого файла – максимальное смещение ограничивает размер сегмента памяти. |