(продолжение 7)
Процедура Seek
Назначение: Перемещает текущую позицию в файле к заданному элементу.
Описание: procedure Seek(f, n: Longint);
Примечания: Параметр f является любой файловой переменной, кроме текстовой, а n представляет собой выражение целого типа. Текущая позиция в файле f перемещается к элементу с номером n. Номер первого элемента файла равен 0.
Sееk(f,FileSize(f)) перемещает текущую позицию в файле в конец файла.
При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.
Ограничения: Процедуру нельзя использовать для текстовых файлов. Файл должен быть открыт.
Пример 26.1
VAR
f: file of char;
s: char;
BEGIN
assign(f,'test.txt');
reset(f); {открыть файл }
seek(f,5); {переместить указатель на 5-й символ (байт) }
s:='@';
write(f,s); {записать новый символ }
close(f); {закрыть файл }
END.
Пример 26.2
VAR
f: file of string[3]; {тип файла занимет 3 байта }
s: string[3];
BEGIN
assign(f,'test.txt');
reset(f); {открыть файл }
seek(f,5); {переместить указатель на 5*3-й символ (байт)}
s:='DoS';
write(f,s); {записать строку символов }
close(f); {закрыть файл }
END.
Функция SeekEof
Назначение: Возвращает для файла состояние "конец файла" (end-of-file).
Описание: function SeekEof [ (var f: Text) ]: Boolean;
Примечания: За исключением того, что функция SееkEof пропускает все пробелы, знаки табуляции и метки конца строки, она полностью соответствует функции Eof. Ее полезно использовать при считывании числовых значений из текстового файла.
При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.
Ограничения: Функцию можно использовать только для текстовых файлов. Файл должен быть открыт.
Пример 26.3
VAR
f: text;
s:char;
BEGIN
assign(f,'test.txt');
reset(f); {открыть файл }
while SeekEof(f)=false do {ЦИКЛ - если еще не конец файла, то }
begin
read(f,s); {считать символ из файла }
write(s); {и показать его на экране }
end;
close(f); {закрыть файл }
writeln;
writeln('Конец файла!');
END.
Функция SeekEoln
Назначение: Возвращает для файла состояние "конец строки" (end-of-line).
Описание: function SeekEoln [ (var f: Text) ]: Boolean;
Примечания: За исключением того, что функция SееkEоln пропускает все пробелы, знаки табуляции и метки конца строки, она полностью соответствует функции Eoln. Ее полезно использовать при считывании числовых значений из текстового файла.
При указании директивы компилятора {$I-} функция IORеsult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.
Ограничения: Функцию можно использовать только для текстовых файлов. Файл должен быть открыт.
Пример 26.4
VAR
f: text;
s:char;
BEGIN
assign(f,'test.txt');
reset(f); {открыть файл }
while SeekEoln(f)=false do {ЦИКЛ - если еще не конец строки, то }
begin
read(f,s); {считать символ из файла }
write(s); {и показать его на экране }
end;
close(f); {закрыть файл }
writeln;
writeln('Конец файла!');
END.
Функция Seg
Назначение: Возвращает сегмент для указанного объекта.
Описание: function Seg(x): Word;
Примечания: Параметр x представляет собой любую переменную или идентификатор процедуры или функции. Результат длиной в слово является адресом сегмента для x.
Пример 26.5
VAR x:real; BEGIN writeln(Seg(x)); readln; END.Процедура SetTextBuf
Назначение: Перемещает текущую позицию в файле к заданному элементу.
Описание: procedure SetTextBuf(var f: Text; var Buf[Size: Word]);
Примечания: Параметр f представляет собой файловую переменную, соответствующую текстовому файлу. Параметр Buf (буфер) - любая переменная, а параметр Size (размер) - необязательное выражение длиной в слово.
Каждая файловая переменная для текстового файла имеет внутренний буфер размером в 128 байт, который по умолчанию используется для буферизации операций чтения и записи. Этот буфер подходит для использования во многих прикладных задачах, однако программы, выполняющие значительное количество операций ввода-вывода (например, задачи, осуществляющие копирование или преобразование текстовых файлов) будут лучше работать с буфером большего размера, поскольку это уменьшает перемещение головки по поверхности диска и избыточное использование файловой системы.
Процедура SetTextBuf переназначает буфер, используемый для текстового файла f: вместо внутреннего буфера файла f используется буфер, заданный параметром Buf. Параметр Size задает размер буфера в байтах. Если этот параметр опущен, то подразумевается использование SizeOf(Buf), то есть по умолчанию в качестве буфера используется вся область памяти, занятая буфером. Новый буфер действует до тех пор, пока для f вновь не выполняется процедура Assign.
Ограничения: Данная процедура никогда не должна применяться для открытого файла.
Borland Pascal не обеспечивает существования буфера на все время выполнения операций ввода-вывода для файла. Общей ошибкой, в частности, является введение в качестве буфера локальной переменной и затем использование файла вне процедуры, в которой описывается буфер.
Пример 26.6
VAR
f: text;
ch: char;
buf: char; { буфер 10 К }
BEGIN
assign(f, 'test.txt');
SetTextBuffer(f, buf); {ввести для более быстрого чтения }
{буфер большего размера }
reset(f);
{ вывести текстовый файл на экран }
while not Eof(f) do
begin
read(f, ch);
write(ch);
end;
readln;
END.
Функция Sin
Назначение: Возвращает синус аргумента.
Описание: function Sin(x: Real): Real;
Примечания: Параметр x является выражением вещественного типа. Результатом будет синус x. Предполагается, что это значение задает угол в радианах.
Пример 26.7
BEGIN
writeln(Sin(30*Pi/180):3:1); {синус 30 градусов}
readln;
END.
Функция SizeOf
Назначение: Возвращает число байт, занимаемых аргументом.
Описание: function SizeOf(x): Word;
Примечания: Параметр x является ссылкой на переменную или идентификатором типа. Данная функция возвращает число байт памяти, занимаемых x.
При передаче значений функциям FillChar, Моvе, GetМем всегда следует использовать функцию SizeOf:
FillChar(s, SizeOf(s), 0);
GetMem(p, SizeOf(RecordType));
Пример 26.8
VAR
s:string[3];
x:integer;
y:longint;
z:byte;
BEGIN
writeln('s - ',SizeOf(s), ' байт');
writeln('x - ',SizeOf(x), ' байт');
writeln('y - ',SizeOf(y), ' байт');
writeln('z - ',SizeOf(z), ' байт');
readln;
END.
Функция SPtr
Назначение: Возвращает текущее значение регистра SP.
Описание: function SPtr: Word;
Примечания: Результат длиной в слово представляет собой смещение указателя стека внутри сегмента стека.
Пример 26.9
BEGIN writeln(SPtr); readln; END.Функция Sqr
Назначение: Возвращает квадрат аргумента.
Описание: function Sqr(x);
Примечания: Параметр x - это выражение целого или вещественного типа. Результат, имеющий тот же тип, что и x, представляет собой квадрат x, то есть x*x.
Пример 26.10
BEGIN
writeln('5^2 = ',Sqr(5)); {5^2 =25}
readln;
END.
Функция Sqrt
Назначение: Возвращает квадратный корень аргумента.
Описание: function Sqrt(x: Real): Real;
Примечания: Параметр x представляет собой выражение вещественного типа. Результатом является квадратный корень x.
Пример 26.11
BEGIN
writeln(Sqr(25)); {= 5 }
readln;
END.
Функция SSeg
Назначение: Возвращает текущее значение регистра SS.
Описание: function SSeg: Word;
Примечания: Результат типа Word представляет собой адрес сегмента стека.
Пример 26.12
BEGIN writeln(SSeg); readln; END.