Иллюстрированный самоучитель по Matlab

         

Позиционирование файла


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

указателем.

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

Таким образом, указатель обеспечивает позиционирование файлов. Имеется ряд функций позиционирования:

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 =



    еrr=

    next = 

    16


    Содержание раздела