Другиетипыданных
Работа с текстовыми файлами
Тема 11
Текстовый файл – это файл, содержащий последовательность символов, разбитую на строки.
Для создания текстового файла необходимопрежде всего объявить соответствующую файловую переменную в разделе varкак переменную типа TextFile. Формат:
var<имя файловой переменной > : TextFile;
Чтобы открыть текстовый файл для записи или для чтения, необходимо отождествить (связать) файловую переменную с именем тестового файла с помощью процедуры AssignFileследующего формата:
AssignFile(<имя файловой переменной>, '<имя текстового файла>');
Пример. var f: TextFile;
. . .
AssignFile(f, 'MyFile.txt');
Затем, если текстовый файл (новый) надо открыть для записи, необходимо использовать процедуру Rewrite следующего формата:
Rewrite<имя файловой переменной>;
Пример. Rewrite (f);
Если же текстовый файл (уже существующий) надо открыть для чтения, необходимо использовать процедуру Resetследующего формата:
Reset<имя файловой переменной>;
Пример. Reset (f);
Для работы с текстовым файлом (т.е. для записи данных в текстовый файл и для чтения данных из текстового файла) используют процедуры ввода-вывода Write, Writeln, Read, Readln соответствующего формата., т.е. Write(<имя файловой переменной>, <список вывода>); Writeln . . . ;Read . . . ; Readln(см п. 2.3).
Пример. Write (f, a:3, b:4);
После окончания работы с текстовым файлом его необходимо закрытьс помощью процедуры Close File. Формат процедуры:
CloseFile<имя файловой переменной>;
Пример. CloseFile (f);
Теперь можно рассмотреть вопрос о выводе результата работы консольного приложения на принтер. Специальная процедура procedure AssignPrn(var F: Text); отождествляет файловую переменную Fс текущим принтером. Чтобы получить распечатку результатов работы консольного приложения, необходимо имя этой переменной указать первым параметром в списке процедуры Write;или Writeln;. Кроме того, необходимо в разделе программы usesуказать имя подключаемого библиотечного модуля Printers.
Пример. Program Printing;
Uses Printers;
Var Prints: TextFile;
Begin
AssignPrn(Prints);
Rewrite(Prints);
Writeln(Prints, ‘Hello!’);
CloseFile(Prints);
End.
Указатели: указатель представляет собой переменную, значением которой является адрес начала размещения некоторых данных в основной памяти. Иными словами, указатель содержит ссылку на соответствующий объект. Указатели могут ссылаться на данные любого типа. Переменные типа «указатель» являются, т.е. их значения определяются во время выполнения программы.
Различают указатели типизированные и нетипизированные. Типизированный указатель может ссылаться на данные определенного типа, который задается при объявлении указателя или описании типа указателя. При этом используется символ ^ перед именем типа адресуемых данных. Формат описания типа для типизированного указателя:
Type<тип указателя> = ^<тип адресуемых данных>;
Нетипизированный указатель имеет тип Pointerи может ссылаться на данные любого типа.
Пример. Объявление переменных-указателей.
Var p1: Pointer ; p2: ^ integer ;
Переменная p2 может адресовать данные типа integer , а переменная p1 – данные любого типа.
С помощью указателя можно получить доступ к значению адресуемых данных. Для этого используется разыменовывание указателя — справа от имени указателя приписывается символ ^.
Указателю можно присвоить значение Nil, тогда данный указатель ни на что не будет указывать. Для определения адреса объекта, к которому можно обратиться с помощью указателя, используется адресная операция@, записываемая перед именем этого объекта.
Пример. Var p: ^integer; n, k: integer;
. . .
p :=@ n ;
n :=100; k := p ^+10;
После выполнения оператора присваивания с @ n в правой части указатель p ссылается на целочисленную переменную n и позволяет обращаться к ней с помощью конструкции p^. После выполнения трех приведенных операторов значение переменной k будет равно 110 .
Процедурные типы: данные процедурного типа позволяют интерпретировать процедуры и функции как обычные значения, которые, например, можно присваивать переменным или передавать в качестве параметров. Пример с организацией подпрограммы для вычисления интеграла, в котором подынтегральная функция вычисляется в результате работы другой подпрограммы-функции.
Описание данных процедурного типа похоже на заголовок процедуры или функции, в котором отсутствует имя подпрограммы. Разрешается использовать методы (подпрограммы, объявленные в классах), при описании которых указываются слова ofobject.
Вариантные типы: вариантные типы применяются для представления значений, которые могут интерпретироваться различными способами. Переменная вариантного типа может содержать значения различных типов и обычно используется в случаях, когда тип ее значения при компиляции не известен или может изменяться в процессе выполнения программы.
Для описания переменной вариантного типа используется словоvariant. Этой переменной можно присваивать значения целочисленных (кроме int64), вещественных, символьных, строковых и логических типов. Все эти типы считаются совместимыми с типом variantи при необходимости преобразования типов выполняются автоматически.
Пример . Var v1, v2: variant;
k: integer; x: real;
. . .
k:=10; v1:=k;
x :=23.17; v 2:= x ; v 1:= x +0.5;