(продолжение 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.