Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Часть 2-Основы программирования (Delphi)

.pdf
Скачиваний:
65
Добавлен:
09.06.2015
Размер:
1.93 Mб
Скачать

o

Глава . ТИПЫ ДАННЫХ (продолжение)

СТРОКИ

Типы String и ShortString

Нуль-терминальные строки

Для обработки текстов в Object Pascal используются следующие типы:

короткая строка ShortString или String [n] , где n <= 255;

длинная строка String;

широкая строка WideString;

нуль-терминальная строка Pchar.

Общим для этих типов является то, что каждая строка трактуется как одномерный массив символов, количество символов в котором может меняться в работающей программе: для String [n] длина строки меняется от 0 до n, для String и Pchar - от 0 до 2 Гбайт.

Встандартном Паскале используются только короткие строки String[n]. В памяти такой строке выделяется n+1 байт, первый байт содержит текущую длину строки, а сами символы располагаются начиная со 2-го по счету байта. Поскольку для длины строки в этом случае отводится один байт, максимальная длина короткой строки не может превышать 255 символов. Для объявления короткой строки максимальной длины предназначен стандартный тип ShortString (эквивалент

String[255]).

ВWindows широко используются нуль-терминальные строки, представляющие собой цепочки символов, ограниченные символом #0. Максимальная длина такой строки лимитируется только доступной памятью и может быть очень большой.

В32-разрядных версиях Delphi введен новый тип String, сочетающий в себе удобства обоих типов. При работе с этим типом память выделяется по мере надобности (динамически) и ограничена имеющейся в распоряжении программы доступной памятью.

Для совместимости с компонентами, основывающимися на OLE-технологии, в Delphi32 введены также широкие строки, объявляемые стандартным типом WideString. По своим свойствам они идентичны длинным строкам String, но отличаются от них тем, что для представления каждого символа используются не один, а два байта.

Примеры объявлений строковых типов: var

ssS:String[250];//Короткая строка длиной до 250 символов ssMax:ShortString;//Короткая строка длиной до 255 символов stS: String; //Длинная строка

swS: WideString;//Широкая строка

pcS: PChar; //Ссылка на нуль-терминальную строку

acS: array [0..1000] of Char;//Нуль-терминальная строка

//длиной до 1000 символов

При объявлении переменной ssS компилятор выделит для ее размещения 250+1 = 251 байт и поместит в первый байт 0 - текущую длину строки. При выполнении операторов

ssS :='Строка символов';

ssS[6] := 'и';

сначала в переменную ssS будет помещена цепочка символов ‘Cтрока символов’, причем 1-й байт получит значение 15 (количество символов в строке). После выполнения второго оператора символ с индексом 6 (индексация байтов начинается с 0, но, поскольку первый байт содержит текущую длину, первый символ в строке имеет индекс 1) будет заменен на 'и', и в переменной окажется цепочка ‘Cтроки символов’.

Совершенно другим будет механизм работы с памятью при объявлении длинной строки stS: компилятор выделит для переменной 4 байта, достаточные для размещения номера той ячейки памяти, начиная с которой будет фактически располагаться символьная строка. Говорят, что stS ссылается на строку. Такого рода переменные-ссылки называются указателями и обсуждаются отдельно. При выполнении оператора

stS :='Строка символов';

программа (а не компилятор!) определит длину цепочки символов ‘Строка символов’, обратится к ядру операционной системы (ОС) с требованием выделить для нее участок памяти длиной 15+5=20 байт, поместит в переменную stS номер первого выделенного байта [На самом деле в STS запоминается дескриптор выделенного участка памяти] и, начиная с него, разместит в этом участке цепочку символов, завершив ее терминальным нулем и 4-байтным счетчиком ссылок. Такое размещение на этапе прогона программы называется динамическим, в то время как размещение на этапе компиляции - статическим. Счетчик ссылок играет важную роль в механизме работы с памятью. С его помощью реализуется “кэширование” памяти: при выполнении оператора

stSS := stS;

память для размещения значения переменной stSS не выделяется, в переменную stSS помещается содержимое указателя stS, а счетчик ссылок в связанной с ним памяти увеличивается на единицу. Таким образом, оба указателя будут ссылаться на одну и ту же область памяти, счетчик ссылок которой будет содержать значение 2. При выполнении оператора

stS := 'Это - '+stS;

счетчик ссылок уменьшается на единицу, выделяется новая область памяти длиной 20 + 6 = 26 байт, указатель на эту область помещается в stS, а в саму память переписывается цепочка символов ‘Это - строка символов’, терминальный нуль и содержащий единицу счетчик ссылок. Теперь переменные stS и stSS будут ссылаться на разные участки памяти, счетчики ссылок которых будут содержать по единице. Выделенная для размещения строки String область памяти освобождается, если ее счетчик ссылок стал равен нулю.

Похожим образом осуществляется работа с памятью при объявлении переменной pcS типа Pchar: компилятор считает эту переменную указателем и выделит для нее 4 байта:

pcS :='Строка символов';

pcS[5] := 'и';{Получили ‘Строки символов’, так как в нульстроке символы нумеруются, начиная с 0}

Программа потребует от ОС 15 + 1 = 16 байт, разместит в памяти цепочку символов и завершающий ее терминальный 0 и поместит адрес выделенного участка памяти в pcS.

И, наконец, последнее объявление acS как массива символов. В Object Pascal считается совместимым с Pchar одномерный массив символов с нулевой нижней границей. В отличие от pcS память для такой переменной выделяется статически (в нашем примере компилятор выделит в сегменте данных для переменной acS 1001 байт). Для размещения в acS нуль-терминальной цепочки символов используется процедура StrCopy.

Необходимость в нуль-терминальных строках возникает только при прямом обращении к API-функциям ОС. При работе с компонентами Delphi в основном используются более удобные длинные строки.

И несколько слов о широких строках. 32-разрядные версии Windows используют три сорта символов: однобайтный символ ANSI, двухбайтный символ и символ Unicode. Однобайтный символ связан с одним из 256 возможных значений, которые трактуются в зависимости от установленной в Windows национальной страницы (для размещения кириллицы используется страница 1251). 256 символов вполне достаточны для отображения национального алфавита любого европейского языка. Для отображения алфавитов некоторых азиатских языков этого недостаточно. В этом случае используется двухбайтный символ, в котором младший байт обычно кодируется семибитным ASCII-кодом, а старший указывает, как должен трактоваться этот код (каким символом он будет изображаться в документе или на экране). Символ Unicode в памяти занимает одно слово (2 байта), которое имеет 65536 возможных значений. Специальная международная комиссия по Unicode выработала соглашение, позволяющее с помощью этого кода представить все символы всех языков мира. Двухбайтные символы и символы Unicode объявляются стандартным типом Widechar, а составленные из них строки - типом WideString. Все Windows-программы, использующие OLE-технологию обмена строками, должны кодировать символы в соответствии с Unicode.

Типы String и ShortString

Несмотря на разницу во внутреннем представлении, короткие строки ShortString и длинные строки String имеют для программиста одинаковые свойства.

Текущую длину строки можно получить с помощью функции Length. Например, следующий оператор уничтожает все ведомые (хвостовые) пробелы:

while (Length(stS) <> 0) and (stS[Length(stS)] = ' ') do SetLentgh(stS, Length (stS) - 1);

В этом примере стандартная процедура SetLength устанавливает новую длину строки.

К строкам можно применять операцию “+” - сцепление, например: stS := 'а' + 'b'; // stS содержит "AB"

stS := stS + 'с'; // stS содержит "ABC"

Если длина сцепленной строки превысит максимально допустимую длину N короткой строки, то “лишние” символы отбрасываются.

Операции отношения =, <>, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #0.

Следующие операции отношения дадут значение True:

'А' > '1'

'Object' < ' Object Pascal' 'Пас' > 'Pascal'

Все остальные действия над строками и символами реализуются с помощью стандартных процедур и функций. Приведем некоторые из них.

Function

 

Возвращает

исходную строку S, в которой все

AnsiLowerCase(const

S:

заглавные

буквы заменены на строчные в

String): String;

 

соответствии с национальной кодировкой Windows (т.

 

 

е. с учетом кириллицы)

 

 

 

 

 

 

Function

 

Возвращает

исходную строку S, в которой все

AnsiUpperCase(const

S:

строчные

буквы заменены на заглавные в

String): String;

 

соответствии с национальной кодировкой Windows

 

 

 

 

 

Function Concat(Sl [,

S2, ...,

Возвращает

строку,

представляющую

собой

SN]: String): String;

 

сцепление строк-параметров S1, S2, ... , SN

 

 

 

Function Copy(St:

String;

Копирует из строки St Count символов, начиная с

Index, Count: Integer): String;

символа с номером Index

 

 

 

 

 

 

 

 

Procedure Delete(St: String;

Index, Count: Integer);

Procedure Insert(SubSt, St:

String; Index: Integer);

Удаляет Count символов из строки St, начиная с символа с номером Index

Вставляет подстроку SubSt в строку St, начиная с символа с номером Index

Function

Pos(SubSt,

Отыскивает в строке St первое вхождение подстроки

St:String): Integer;

 

SubSt и возвращает номер позиции, с которой она

 

 

начинается. Если подстрока не найдена, возвращается

 

 

ноль

 

Function Length(St: String):

Возвращает текущую длину строки St

Integer;

 

 

 

 

 

Procedure

 

Устанавливает новую (меньшую) длину NewLength

SetLength(St:String;

строки St. Если NewLength больше текущей длины

NewLength: Integer);

строки, то обращение к SetLength игнорируется

 

 

 

Подпрограммы преобразования строк в другие типы

Function StrToInt(St:String): Integer;

Преобразует символы строки St в целое число. Строка не должна содержать ведущих или ведомых пробелов

Function

StrToFloat(St:String):

Преобразует

символы

строки

St

в

Extended;

 

 

вещественное число. Строка не должна

 

 

 

содержать ведущих или ведомых пробелов

 

 

 

 

Function

StrToCurr(St:

String):

Преобразует символы строки St в целое число

Currency;

 

 

типа Currency. Строка не должна содержать

 

 

 

ведущих или ведомых пробелов

 

 

 

 

 

 

 

 

 

 

Function StrToDateTime(St: Преобразует символы строки St в дату и String): TDateTime; время. Строка должна содержать правильную дату и правильное время, разделенные

пробелом, например: '28.06 18:23'

Procedure Val(St: String; var

 

Преобразует строку символов St во

X, Code: Integer);

 

внутреннее

представление

целой

или

 

 

 

вещественной

переменной

X, которое

 

 

 

определяется типом этой переменной.

 

 

 

Параметр Code содержит ноль, если

 

 

 

преобразование прошло успешно, и тогда в X

 

 

 

помещается результат преобразования. В

 

 

 

противном случае он содержит номер позиции

 

 

 

в строке St, где обнаружен ошибочный

 

 

 

символ, и в этом случае содержимое X не

 

 

 

меняется. В строке St могут быть ведущие

 

 

 

и/или ведомые пробелы. Если St содержит

 

 

 

символьное

представление

вещественного

 

 

 

числа, разделителем целой и дробной частей

 

 

 

должна быть точка независимо от того, каким

 

 

 

символом этот разделитель указан в Windows

 

 

 

 

 

 

Подпрограммы обратного преобразования

 

 

 

 

 

 

 

Function

IntToStr(Value: Integer)

:

Преобразует целое значение Value в строку

String;

 

 

символов

 

 

 

 

 

 

Function FloatToStr(Value: Extended):

Преобразует вещественное значение Value

в

String;

 

 

строку символов

 

 

 

 

 

 

Function

FloatToStrF(Value:

Преобразует вещественное значение Value

в

Extended;

Format: TFloatFormat;

строку символов с учетом формата Format и

Precision, Digits: Integer): String;

 

параметров Precision и Digits (см. пояснения

 

 

 

ниже)

 

 

 

 

 

 

Function

DateTimeToStr(Value:

Преобразует дату и время из параметра Value

TDateTime): String;

 

в строку символов

 

 

 

 

 

 

 

 

 

 

 

Procedure Str(X [:Width[:Decimals]];

Преобразует число X любого вещественного

Var St:String);

или целого

типов в

строку

символов

St.

 

Параметры Width и Decimals (если они

 

присутствуют)

задают

формат

 

преобразования: Width определяет общую

 

ширину

поля,

выделенного

под

 

соответствующее символьное

представление

 

вещественного или целого числа X, а Decimals

 

– количество символов в дробной части (этот

 

параметр имеет смысл только в том случае,

 

когда X – вещественное число)

 

 

 

 

 

 

 

 

При преобразовании с помощью функций StrToxxx строка может содержать недопустимые для типа ххх символы. В этом случае возбуждается исключительная ситуация EConvertError. При обратных преобразованиях xxxToStr формат получаемой строки зависит от установленных в Windows системных параметров: разделителей даты, времени, целой и дробной частей вещественного числа.

В Delphi 4...6 изменена функция StrToDate для того, чтобы упростить ввод двух цифр года с учетом смены столетия. С этой целью в модуле System введена глобальная переменная TwoDigitYearCenturyWindow, которая определяет цифровой рубеж столетия. Если две цифры года больше или равны значению этой переменной, цифры года относятся к текущему столетию, если меньше - переносятся в следующее. Пусть, например, TwoDigitYearCenturyWindow содержит значение 50. Тогда любые две цифры года в диапазоне 00..49 дополняются базой 2000 (2000, 2001, ..., 2049), в то время как цифры в диапазоне 50..99 дополняются базой 1900 (1950, 1951, ..., 1999). Такой прием позволяет в известной мере смягчить проблему двухцифровых годов на рубеже столетия, однако полным ее решением будет, разумеется переход на четырехцифровое представление года. По умолчанию TwoDigitYearCenturyWindow имеет значение 0, и поэтому любые две цифры года дополняются базой 1900.

Для форматного преобразования вещественных чисел предназначена функция FloatToStrF. Она использует значение Format перечисляемого типа TFloatFormat и два дополнительных параметра – Precision и Digits. Правила использования параметров функции FloatToStrF показаны в следующей таблице (примеры преобразования даются для Value π = 3,141593654, Precision = 5 и Digits = 2):

Значение

Описание

Format

 

 

 

ffExponent Научная форма представления с множителем EXX (“умножить на 10 в степени XX”). Precision задает общее количество десятичных цифр мантиссы, Digits - количество цифр в десятичном порядке XX. Число округляется с учетом первой отбрасываемой цифры: 3,1416Е+00

ffFixed

Формат с фиксированным положением разделителя целой и дробной частей. Precision задает общее количество десятичных цифр в представлении числа, Digits - количество цифр в дробной части. Число округляется с учетом первой отбрасываемой цифры: 3,14

ffGeneral Универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа. Соответствует формату ffFixed, если количество цифр в целой части меньше или равно Precision, а само число - больше или равно 0,00001, в противном случае соответствует формату ffExponent: 3,1416

ffNumber Отличается от ffFixed использованием символа-разделителя тысяч при выводе больших чисел (для русифицированной версии Windows таким разделителем является пробел). Для Value = π *1000 получим 3 141,60

ffCurrency Денежный формат. Соответствует ffNumber, но в конце строки ставится символ денежной единицы (для русифицированной версии Windows –

символы “р.”). Для Value = π*1000 получим 3 141,60р.

Нуль-терминальные строки

Нуль-терминальные строки широко используются при обращениях к так называемым API-функциям Windows (API - Application Program Interface –

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

проблемы связи с API-функциями Windows, программисту редко приходится прибегать к нуль-терминальным строкам. Тем не менее далее описываются некоторые особенности обработки таких строк.

Напомним что базовый тип String хранит в памяти терминальный нуль, поэтому Object Pascal допускает смешение обоих типов в одном строковом выражении, а также реализует взаимное приведение типов с помощью автофункций преобразования String и PChar. Например:

var

pcS: PChar; ssS: String;

begin

pcS := '123456'; ssS := 'X = ';

Label1.Caption := ssS + pcS; end;

В метке Label1 будет выведено ‘X = 123456’. Выражение ssS + pcS приводится компилятором к общему типу String.

Текстовые константы совместимы с любым строковым типом.

В Delphi считается совместимым с PChar и String массив символов с нулевой нижней границей. В отличие от PChar и String такой массив распределяется статически (на этапе компиляции), поэтому наполнение массива символами и завершающим нулем осуществляется специальной процедурой StrCopy:

var

acS: array [0..6] of Char; begin

StrCopy(acS, '123456'); Label1.Caption := acS;

end;

Для работы с типом PChar используются такие же операции, как и с типом String: операция конкатенации “+” и операции сравнения >, >=, <, <=, =, <>. Используются также специальные подпрограммы.

Function StrCat(Dest,Source:

Копирует строку Source в конец строки Dest и

PChar): PChar;

возвращает указатель на строку Dest

 

 

Function

StrCopy(Dest,

Копирует строку Source в строку Dest и возвращает

Source: PChar): PChar;

указатель на Dest. StrCopy не проверяет реальный

 

 

размер памяти, связанный с Dest (он должен быть не

 

 

меньше StrLen(Source)+1)

 

 

Function

StrLen(Str:PChar):

Возвращает длину строки

Cardinal;

 

 

 

 

Function

StrPas(Str:PChar):

Преобразует нуль-терминальную строку в строку

String;

 

String

 

 

 

Function StrPos(Strl,

Str2: PChar): PChar;

Ищет подстроку Str2 в строке Strl и возвращает указатель на первое вхождение Str2 или NIL, если подстрока не найдена

Глава . ТИПЫ ДАННЫХ (продолжение)

ФАЙЛЫ

Под файлом понимается именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, диска CD-ROM).

Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Object Pascal, кроме файлов. Иными словами, нельзя создать “файл файлов”. В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

Файловый тип можно задать одним из трех способов:

<имя> = File of <тип>;// типизированные файлы <имя> = TextFile;// текстовые файлы

<имя> = File;// нетипизированные файлы

Здесь <имя> - имя файлового типа (правильный идентификатор); File, of - зарезервированные слова (файл, из); TextFile - имя стандартного типа текстовых файлов; <тип> - любой тип Object Pascal, кроме файлов. Например:

type

Product = record Name: String; Code: Word; Cost: Comp end;

var

Fl: File of Char; F2: TextFile; F3: File;

F4: File of Product;

В примере F1 и F4 - типизированные файлы, F2 - текстовый файл, F3 - нетипизированный файл. Вид файла, вообще говоря, определяет способ хранения в нем информации. Однако в Object Pascal нет средств контроля вида ранее созданных файлов. При объявлении уже существующих файлов программист должен сам следить за соответствием вида объявления характеру хранящихся в файле данных.

Доступ к файлам

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

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре AssignFile (<ф.п.>, <имя файла>); Здесь <ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа); <имя файла > - строка, содержащая имя файла и, если это необходимо, маршрут доступа к нему.

Инициировать файл означает указать для этого файла направление передачи данных. В Object Pascal можно открыть файл для чтения, для записи информации, а также для чтения и записи одновременно.

Для чтения файл инициируется с помощью стандартной процедуры Reset (<ф.п.>); Здесь <ф. п. > - файловая переменная, связанная ранее процедурой AssignFile с уже существующим файлом.

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

0.

В Object Pascal разрешается обращаться к типизированным файлам, открытым процедурой Reset (т. е. для чтения информации), с помощью процедуры Write (т. е. для записи информации). Для текстовых файлов, открытых процедурой Reset, нельзя использовать процедуры записи Write или WriteLn.

Стандартная процедура Rewrite (<ф.п.>); инициирует запись информации в файл, связанный с файловой переменной <ф.п.>. Процедурой Rewrite нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл (если он был) уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации, и его указатель принимает значение 0.

Стандартная процедура Append (<ф.п.>); инициирует запись в ранее существовавший текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура Append применима только к текстовым файлам, т. е. их файловая переменная должна иметь тип TextFile. Процедурой Append нельзя инициировать запись в типизированный или нетипизированный файл. Если текстовый файл ранее уже был открыт с помощью Reset или Rewrite, использование процедуры Арpend приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.

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

Ниже описываются процедуры и функции, которые можно использовать с файлами любого вида. Специфика работы с типизированными, текстовыми и нетипизированными файлами рассматривается далее.

Примечание. Множество процедур и функций для выполнения основных операций с файлами и каталогами, таких как переименование, удаление и прочее, не рассматриваются. Также операционная система Windows имеет собственные средства работы с файлами, которые становятся доступны программе Delphi после ссылки на модуль Windows. Поскольку файловые средства Object Pascal реализуют подавляющее большинство программных запросов, то назначение соответствующих API-функций рассматриваться не будет. За подробной информацией обращайтесь к справочной службе в файлах WIN32.HLP или WIN32SDK.HLP. Эти файлы расположены в каталоге Program Files | Common Files | Borland Shared | MSHelp.

Procedure

CLOSEFILE (var F);

Закрывает файл, однако связь файловой переменной F с именем файла, установленная ранее процедурой AssignFile, сохраняется. При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге. Функции процедуры CloseFile выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры AssignFile

Function EOF (var

Тестирует конец файла и возвращает True, если файловый

F): Boolean;

 

указатель стоит в конце файла. При записи это означает, что

 

 

очередной компонент будет добавлен в конец файла, при чтении

 

 

- что файл исчерпан

 

 

 

Function

 

Возвращает True, если файл с именем (и, возможно, маршрутом

FILEEXISTS

(const

доступа) FileName существует

FileName: String):

 

Boolean;

 

 

 

 

Procedure

CHDIR

Изменяет текущий каталог: Path - строковое выражение,

(Path: String);

содержащее путь к устанавливаемому по умолчанию каталогу

 

 

 

Если делается попытка инициировать чтение из несуществующего файла, возбуждается исключительная ситуация. Чтобы проверить, существует ли дисковый файл, можно использовать стандартную функцию FileExists, которая возвращает Truе, если указанный при обращении этой функции файл существует, и False - если не существует.

Например:

if FileExists(FileName) then

..... // Файл существует

else ..... // Файл не существует

Текстовые файлы

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

Текстовый файл трактуется в Object Pascal как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой. При создании текстового файла в конце каждой строки ставится специальный признак EOLN (End Of LiNe - конец строки) – последовательность кодов #13 (cr) и #10 (lf), а в конце всего файла - признак EOF (End Of File - конец файла) – код #26. Эти признаки можно протестировать одноименными логическими функциями.

Для доступа к записям применяются процедуры Read, ReadLn, Write, WriteLn. Они отличаются возможностью обращения к ним с переменным числом фактических параметров, в качестве которых могут использоваться символы, строки и числа. Первым параметром в любой из перечисленных процедур должна стоять файловая переменная. Обращение осуществляется к дисковому файлу, связанному с переменной процедурой AssignFile.

Function EOLN(var

F:

Тестирует маркер конца строки и возвращает True, если конец

TextFile): Boolean;

 

строки достигнут

 

 

 

Procedure READ(var Читает из текстового файла последовательность символьных F: TextFile; V1 [, представлений переменных Vi типа Char, String, а также V2,...,Vn ]); любого целого или вещественного типа, игнорируя признаки

EOLN