Позиционирование
файла
При считывании
и записи файлов они условно представляются в виде линейно расположенных данных,
наподобие записи на непрерывной магнитной ленте. Место, с которого идет считывание
в данный момент (или позиция, начиная с которой идет запись), определяется специальным
указателем.
Файлы последовательного доступа просматриваются строго от
начала до конца, а в файлах произвольного доступа указатель может быть размещен
в любом месте, начиная с которого ведется запись или считывание данных файла.
Таким образом,
указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования:
-
eofstat
= feof(fid) — проверяет, достигнут ли конец файла с идентификатором fid.
Возвращает 1, если указатель установлен на конец файла, и 0 — в противном
случае;
-
message
= ferror(fid) — возвращает сведения об ошибке в виде строки message. Аргумент
fid — идентификатор открытого файла (см. функцию fopen с ее подробным описанием);
-
message
= f error (f id,'clear') — очищает индикатор ошибки для заданного файла;
-
[message,errnum]
= ferror(.) — возвращает номер ошибки errnum последней операции ввода-вывода
для заданного файла.
Если последняя
операция ввода-вывода, выполненная для определенного значением fid файла, была
успешной, значение message — это пустая строка, a errnum принимает значение
0.
Значение errnum,
отличное от нуля, говорит о том, что при последней операции ввода-вывода произошла
ошибка. Параметр message содержит строку, содержащую информацию о характере
возникшей ошибки.
Пример:
»
fid=fopen('с:\examplel'.'а+')
fid =
3
»
t= fread(3,[4.5])
t =
Empty
matrix: 4-by-0
» ferror(3)
ans =
Is the file open for reading? . . .
-
frewind(fid)
— устанавливает указатель позиции в начало файла с идентификатором fid;
-
status
- fseekCfid,offset,origin) — устанавливает указатель в файле с идентификатором
fid в заданную позицию — на байт, указанный параметром offset относительно
origin.
Аргументы:
-
fid —
идентификатор файла, возвращенный функцией fopen;
-
offset
— значение, которое интерпретируется следующим образом:
-
offset>0
— изменяет позицию указателя на offset байт в направлении к концу файла;
-
offset=0
— не меняет позицию указателя;
-
offset<0
— изменяет позицию указателя на offset байт в направлении к началу файла;
-
origin
— аргумент, принимающий следующие значения:
-
'bof
или -1 — начало файла;
-
'cof'
или 0 — текущая позиция указателя в файле;
-
' eof'
или 1 — конец файла;
-
status
— выходной аргумент. Принимает значение 0, если операция fseek произошла
успешно, и -1 в противном случае. Если произошла ошибка, используйте функцию
ferror для получения более подробной информации;
-
position=ftel
I (fid) — возвращает позицию указателя для файла с идентификатором fid,
полученным с помощью функции fopen. Выходной аргумент position — неотрицательное
целое число, определяющее позицию указателя в байтах относительно начала
файла. Если запрос был неудачным, position принимает значение -1. Используйте
функцию ferror для отображения характера ошибки.
Примеры:
»
f id-fopen('с:\example'.'a+')
fid =
3
»
count = fwrite(3,magic(6))
count = 36
»
ftelK3)
ans =
36
»
frewind(3):ftell(3)
ans =
0
»
fseek(3.12.0);ftell(3)
ans=
12
»
feof(3)
ans =
0
»
fclose(3)
ans =
0
-
s=sprintf(format,A,...)
— форматирует данные в матрице А в формате, заданном параметром format,
и создает из них строковую переменную s;
-
[s.errrmsg]
= sprintfCformat,A....) — аналогична ранее описанной функции, но дополнительно
возвращает строку ошибки errmsg, если ошибка имела место, или пустую строку
в противном случае. Строка format определяет систему счисления, выравнивание,
значащие цифры, ширину поля и другие атрибуты выходного формата. Она может
содержать обычные символы наряду со спецификаторами, знаками выравнивания
и т. д. Функция fprintf ведет себя, как и аналогичная функция fprintf 0
языка ANSI С, с некоторыми исключениями и расширениями.
Примеры:
»
sprintf('*0.5g'.(l+sqrt(7))/4)
ans
=
0.91144
»
sprintfC
'%s',
'привет')
ans
=
привет
Функция sscanf
аналогична функции fscanf за исключением того, что она считывает данные из символьной
переменной системы MATLAB, а не из файла.
-
А = sscanf
(s,format) — считывает данные из символьной переменной s, преобразует их
согласно значению format и создает на основе этих данных матрицу А. Параметр
format определяет формат данных, которые нужно считать;
-
А = sscanf(s,format,size)
— считывает количество данных, определенное параметром size, и преобразует
их согласно строке format. Параметр size представляет собой аргумент, определяющий
количество данных для чтения. Допустимы следующие значения:
-
n —
чтение п элементов в вектор-столбец;
-
inf
— чтение элементов до конца символьной переменной и помещение их в вектор-столбец,
содержащий такое же количество элементов, как и в строковой переменной;
-
[m.n]
— считывает столько элементов, сколько требуется для заполнения матрицы
размера
тхп.
Заполнение происходит по столбцам. Величина п (но
нет!) может принимать значение Inf.
-
[A,count,errmsg,nextindex]
= sscanf(...) — считывает данные из символьной переменной s, преобразует
их согласно значению format и возвращает в матрицу А. Параметр count — выходной.аргумент,
который возвращает число успешно считанных элементов; errmsg — выходной
аргумент, который возвращает строку ошибки, если ошибка произошла, и пустую
строку в противном случае; nextindex — выходной аргумент, который содержит
число, на единицу большее, чем количество символов в s.
Строка format
состоит из обычных символов и спецификаторов. Спецификаторы указывают тип данных
и включают в себя символ
%,
опцию ширины поля и символы формата. Пояснения
можно найти в описании функции fscanf.
Пример:
»
s = '4.83 3.16 22 45';
»
[A.n,err,next] = sscanf(s. '%f')
А
=
4.8300
- 3.1600
22.0000
45.0000
n =
4
еrr=
next
=
16
Содержание раздела