Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основные понятия среды MATLAB.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

6.4 Операции над форматированными файлами

Файлы, содержащие форматированные данные, называют форматированными файлами. Для работы со строковыми данными больше подходят форматированные файлы. Их открывают с флагами 'r' или 'w' (букву b, что означает binary – двоичный, теперь добавлять не надо). Для обработки таких файлов предусмотрены специальные функции, представленные ниже.

Синтаксис.

  • line = fgetl(fid) – возвращает строку из файла с указателем fid с удалением символа конца строки. Если функция fgetl обнаруживает конец файла, то она возвращает значение -1 (см. функцию fopen с более подробным описанием fid);

  • line = fgets(fid) – возвращает строку из файла с указателем fid, не удаляя символ конца строки. Если функция fgets обнаруживает конец файла, то она возвращает значение -1;

  • line = fgets(fid,nchar) – возвращает не больше чем nchar первых символов строки. После признака конца строки или конца файла никакие дополнительные символы не считываются ;

  • count = fprintf(fid.format,A....) – форматирует данные, содержащиеся в действительной части матрицы А, под контролем строки format и записывает их в файл с указателем fid. Функция fprintf возвращает число записанных байтов. Значение указателея fid — целое число, возвращаемое функцией fopen.

Для выполнения операций ввода-вывода используются команды fprintf и fscanf. Если опустить идентификатор указателя fid в списке аргументов функции fprintf, то вывод будет осуществляться на экран, так же как при использовании стандартного вывода (fid=l). Для задания формата используется символьная строка, структура и специальные символы которой описаны в Приложении 1.

Синтаксис.

  • fprintf(format,A....) – запись осуществляется на стандартное устройство – экран (но не в файл). Строка format определяет систему счисления, выравнивание, значащие цифры, ширину поля и другие атрибуты выходного формата. Она может содержать обычные буквы алфавита наряду со спецификаторами, знаками выравнивания и т. д.

  • А = fscanf(fid,format) – читает все данные из файла с указателем, fid, преобразует их согласно значению параметра format и возвращает в виде матрицы А. Значение указателя fid — целое число, возвращаемое функцией fopen. Параметр format представляет собой строку, определяющую формат данных, которые необходимо прочитать;

  • [A,count] = fscanf(fid.format,size) — считывает количество данных, определенное параметром size, преобразует их в соответствии с параметром format и возвращает вместе с количеством успешно считанных элементов count. Параметр size — это произвольный аргумент, определяющий количество считываемых данных. Допустимы следующие значения:

    • n – чтение n элементов в вектор-столбец;

    • inf – чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;

    • [m,n] – считывает столько элементов, сколько требуется для заполнения матрицы размера тхп. Заполнение происходит по столбцам. Величина n может принимать значение Inf.

Между символом % и символом формата допустимо вставлять следующие символы:

  • звездочка (*) означает, что соответствующее значение не нужно сохранять в выходной матрице;

  • строка цифр задает максимальную ширину поля;

  • буква обозначает размер полученного объекта: h – для короткого целого числа (например, %nd), l – для длинного целого числа (например, %ld) или для числа с двойной точностью с плавающей запятой (например, % lg).

Примеры.

  1. >> x=1:5;y=x.^2; % вычисление квадрата первых пяти целых чисел

>> fid = fopen('c:\square.txt','w'); % открытие файла для записи

>> fprintf(fid,'%3d %5d\n',x,y); % запись в файл целых чисел х и у

>> fclose(fid); % закрытие файла

>> fid = fopen('c:\square.txt','r'); % открытие файла для чтения

>> res=fscanf(fid,'%d',[5,2]); % чтение целочисленных значений в матрицу 5х2

>> res % вывод результата чтения

res =

1

1

2

4

3

9

4

16

5

25

>> fclose(fid); % закрытие файла

2. Текстовые файлы, в отличие от бинарных, можно читать с меньшими предосторожностями и детальных сведений о записанных значениях строковых переменных (например, указания длины строк). После записи двух строковых переменных с их разделением спецсимволами \r\n, строки можно читать без указания их длины. Для этого необходимо воспользоваться функцией fgetl ( взять новую строку).

>> str1 = 'Hello'; str2 = 'World!'; % задание символьных строк

>> fid1 = fopen( 'strTest2.txt', 'w' ); % открытие файла для записи

>> fprintf( fid1, '%s\r\n%s\r\n', str1, str2 ); % запись строк в файл

>> fclose( fid1 ); ); % закрытие файла

>>fid1 = fopen( 'strTest2.txt', 'r' ); % открытие файла для чтения

>> str1 = fgetl( fid1 ); str2 = fgetl( fid1 ); % чтение строк из файла

>> fclose( fid1 ); ); % закрытие файла

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

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

Ситнаксис.

  • eofstat = feof(fid) – проверяет, достигнут ли конец файла с указателем fid. Возвращает 1, если указатель установлен на конец файла, и 0 – в противном случае;

  • message = ferror(fid) – возвращает сведения об ошибке в виде строки message открытого файла с указателем fid;

  • message = ferror(fid,'clear') – очищает индикатор ошибки для заданного файла;

  • [message,errnum] = ferror(.) – возвращает номер ошибки errnum последней операции ввода-вывода для заданного файла. Если последняя операция ввода-вывода, выполненная успешно, значение message – это пустая строка, a errnum принимает значение 0. Значение errnum, отличное от нуля, означает, что при последней операции ввода-вывода произошла ошибка, а параметр message содержит строку, содержащую информацию о характере возникшей ошибки.

  • frewind(fid) – устанавливает указатель позиции в начало файла с указателем fid;

  • status = fseek(fid,offset,origin) – устанавливает указатель в файле с указателем fid в заданную позицию – на байт, указанный параметром offset относительно origin. Значения параметров приведены в таблице

  • position=ftell(fid) – возвращает позицию указателя. Выходной аргумент position – неотрицательное целое число, определяющее позицию указателя в байтах относительно начала файла. Если запрос был неудачным, position принимает значение -1.

Таблица 1.22 Параметры команды fseek

Пар-р

Значение

offset

>0

Указатель перемещается на offset байт в направлении к концу файла;

=0

не меняет позицию указателя;

<0

изменяет позицию указателя на offset байт в направлении к началу файла.

origin

'bof' или -1

начало файла;

'cof' или 0

текущая позиция указателя в файле;

'eof' или 1

конец файла.

status

0

операция fseek произошла успешно

-1

произошла ошибка ( для получения информации используется функция ferror)

Пример.

>> fid = fopen('с:\example','a+') % открытие файла для добавления

fid = 3

>> count = fwrite(3,magic(6)); % запись в файл магической матрицы 6х6

>> ftell(3); % определение положения курсора записи

ans = 36

>> frewind(3);ftell(3) % установка курсора на начало файла

ans = 0

>> fseek(3,12,0);ftell(3) % установка курсора на 12-ю запись относительно начала файла

ans= 12

>> fclose(3) ; % закрытие файла

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

Контрольные вопросы

  1. Что такое форматированный файл? Можно ли выполнять его редактирование с помощью текстовых редакторов?

  2. Какие перации можно выполнять над форматированными файлами?

  3. Какие функции используют для записи и чтения значений при работе с форматированными файлами?

Упражнения.

1. На отрезке выполните табулирование функции и результат в виде таблицы (x, y) запишите в форматированный файл на диск. Откройте созданный файл и выведите содержимое на экран. Выведите только первых три значения. Выведите только пятое значение. Выведите последних два значения.

2. Создайте структуру, содержащую информацию о студенте Stud. Запише в файл даныые о нескольких студентах. Выведите содержимое файла на екран. выведите информацию о втором студенте.

143