Fwrite(fid, pi, 'float64'); fclose(fid)




Команды ввода-вывода

В MATLAB поддерживается работа с внешними данными, подготовленными в различных форматах. Такая работа осуществляется при помощи набора эффективных команд. Для записи и считывания информации разработан специальный формат mat-файла, избавляющий пользователя от необходимости вникать в детали хранения данных. Более того, при помощи функций из библиотеки С можно создавать приложения с доступом к mat-файлам. Также имеется набор команд для форматного ввода и вывода информации, для записи бинарных файлов и для работы с некоторыми типами стандартных файлов.

 

Параметры команд load и save

Схематически обращение к команде save выглядит следую­щим образом:

save [ИМЯ] [-ПАРАМЕТРЫ] [ПЕРЕМЕННЫЕ]

В квадратных скобках даны необязательные параметры, при отсутствии которых запись производится согласно системным назначениям. Когда имя файла ИМЯ не указано, то данные будут сохранены в двоичном файле matlab.mat. Если расшире­ние файла пропущено, то данные запишутся в файл ИМЯ.mat. Список величин, подлежащих записи, задается параметром ПЕРЕМЕННЫЕ, при отсутствии которого со­храняются все данные из рабочей области.

Дополнительные ПАРАМЕТРЫмогут принимать следующие значения:

  • ascii — сохранение в виде ASCII-файла с мантиссой из восьми цифр;
  • ascii -double — сохранение в виде ASCII-файла с шестнадцатизначной мантис­сой;
  • append — дозапись в существующий файл.

При сохранении информации в двоичном коде для записи вещественных чисел используется 8 байт, а для целочисленных переменных могут применяться следу­ющие форматы: int8 (однобайтное целое число от -128 до 127), intl6 (двухбайтное целое число) и int32 (четырехбайтное целое число).

Пример. Запись переменных d и е в текстовый файл abc.txt

Save abc.txt -ascii d e

Назначения параметров для команды load аналогичны описанным ранее:

load [ИМЯ] [-ПАРАМЕТРЫ] [ПЕРЕМЕННЫЕ]

В качестве ПАРАМЕТРА можно указывать -ascii или –mat, что заставляет рассматривать считываемый файл в соответствующем формате независимо от его расширения. Из файла ИМЯ считываются только переменные, перечисленные в списке ПЕРЕМЕН­НЫЕ, а отсутствие списка вызовет считывание всех величин, сохраненных в файле ИМЯ.

Например, данные из ASCII-файла с именем NAME.ext можно считать по команде

load NAME.ext,

поскольку любое расширение, отличное от.mat, подразумевает текстовый формат. Сами данные должны быть организованы в виде массива с одинаковым числом элементов во всех строках, иначе при считывании данных будет выведено сообще­ние об ошибке. По прочтении данные будут помещены в массив с именем NAME.

Записать и считать переменные с общей частью в имени можно при помощи знака *, например, чтобы сохранить все переменные, начинающиеся с сочетания abc, достаточно команды

save abc*

 

Форматные операции ввода-вывода

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

 

Имя Назначение
fopen Открытие файла
fclose Закрытие файла
fread Считывание данных из файла
fwrite Запись данных в файл
fscanf Считывание форматированных данных из файла
fprintf Запись данных в файл или вывод на экран
fgetl Считывание строки из файла без символов конца строки
fgets Считывание строки из файла с символами конца строки
dlmread Чтение данных с разделителями из текстового файла
textread Чтение форматированных данных из текстового файла

 

Перед началом записи или чтения нужный файл следует открыть при помощи команды

FI = fopen('NAME', 'FLAG')

Имя файла NAMЕ должно содержать путь, если файл берется из каталога, не указанного в списке каталогов Path Browser. Строковая переменная 'FLAG' определяет тип файла и способ работы с ним: 't'— текстовый файл, 'b' — бинарный файл, 'r' — чтение, 'w' —запись, r+'— чтение и запись одновременно, 'a' — добавление в конец файла. Например, для чтения бинарного файла следует задать флаг 'rb', для записи текстового — 'wt'. Полученный в результате выполнения операции fopen числовой идентификатор FI используется в качестве параметра для функций fread и fwrite. Если открыть файл не удалось, то FI = -1. Чтобы закрыть файл, надо выполнить команду

Fclose (FI)

Команда fread применяется для чтения бинарных файлов:

[A, COUNT] = fread(FI, SIZE, 'PREC', SKIP)

Здесь А— имя матрицы, куда заносятся считываемые данные, a COUNT — число прочитанных элементов. Если дополнительный параметр SIZE отсутствует, то считывается весь файл, целое число N в качестве SIZE задает считывание N элементов и формирование вектора-строки, а при указании в качестве SIZE вектора [M, N] формируется матрица размера [M, N], причем параметр N может принимать значение inf. Параметр 'PREC ' задает число бит для записи чисел. Например, текстовая строка 'float64' указывает, что данные следует читать в формате двойной точности, по 8 байт на число, а четырехбайтовый формат записи целых чисел задается строкой 'Integer*4'. Перечень допустимых форматов можно получить по справке help fread. Дополнительный параметр SKIP определяет число байтов, которое должно быть пропущено после считывания очередного элемента.

Команда fwrite используется для записи бинарных файлов:

COUNT = fwrite(FI, VAR, 'PREC', SKIP)

Здесь FI — идентификатор файла, VAR — имя записываемой переменной, а назначение остальных параметров то же, что и для команды fread.

Приведем пример. Откроем файл ааа.1 на запись бинарных данных и сохраним магическую матрицу размера 2x2:

fid = fopen('aaa.1', 'wb'), fwrite(fid, magic(2), 'integer*4')

fid =

ans =

Допишем вещественное число и закроем файл:

fwrite(fid, pi, 'float64'); fclose(fid)

Теперь считаем записанные данные:

f=fopen('aaa.1', 'r+'); [aa, n]=fread(f, [2, 2], 'integer*4')

aa =

1 3

4 2

n =

bb = fread(f, 'float64'), cc = fread(f), fclose(f);

bb=

3.1416e*000

cc =

[]

Действительно, в файле aaa.l была записана матрица второго порядка и число π. При попытке считывания еще одного числа получен пустой массив. Если же при чтении не определить структуру матрицы или указать иной формат для чтения, то результатом будет вектор-столбец из элементов, число которых и сами значения определяются форматом считывания. Например, для формата float64 получаем строку из трех элементов:

f = fopen('aaa.1'); aa = fread(f, 'float64'); fclose(f); aa'

ans =

8.4880e-314 4.2440e-314 3.1416e+000

При считывании с установками по умолчанию получается вектор из 24 целых чисел:

f=fopen('aaa.1'); aa=fread(f); fclose(f); aa'

ans =

Colurns 1 through 12

1 0 0 0 4 0 0 0 3 0 0 0

Columns 13 through 24

2 0 0 0 24 45 68 84 251 33 9 64

Для позиционирования в файле используется функция fseek (FI, NUM, 'FLAG'), служащая для перемещения на целое число NUM позиций, причем положительное NUM означает продвижение к концу файла, а отрицательное — к началу файла. После открытия файла указатель установлен на первый байт. После считывания очередного числа указатель переместится на столько байтов, каков формат чтения. Текущее положение выводится по команде ftell (FI). Для проверки достижения конца файла служит команда feof (FI). Для возврата в начало файла можно использовать функцию frewind (FI).

Бинарные файлы являются просто потоками байтов. Для работы с текстом, разбитым на строки, используются текстовые файлы. Такие файлы могут содержать как текст, так и числовую информацию, которую для записи предварительно следует перевести в строковые переменные при помощи команд num2str или int2str. Для чтения информации из текстовых файлов применяются функции fgetl, fgets и fscanf. Для записи служит функция fprintf, причем если файловый идентификатор равен единице или отсутствует, то вывод идет на экран. Для чтения и записи применяются форматные спецификации, см. табл.

 

Код Описание
%d Чтение целого числа (при выводе — переменная double)
%u Чтение положительного целого числа (при выводе — переменная double)
%f Чтение вещественного числа (при выводе — переменная double)
%s Чтение строки с пробелами (при выводе — переменная типа cellstr)
%q Чтение строки в двойных кавычках(при выводе — переменная типа cellstr)
%c Чтение символов, разделенных пробелами (при выводе — переменная типа cellstr)

Приведём пример считывания разнородных данных при помощи команды textread. Пусть в файле my.dat данные размещены на двух строках следующим образом:

One 1.2 -3 5

Two 1e-6 123 West

Кроме того, пусть в файле my.dat имеется третья пустая строка.

Напомним, что для чтения вещественной, целой и строковой переменных следует использовать соответственно спецификации %f, %d, %s. Выполним команду

[nam, x, n, mar] = textread('my.dat', '%s %f %d %s')

После считывания данных выведем переменные nam, x, n и mar:

nam =

'One'

'Two'

x =

1.2

1e-006

n =

-3

mar =

'5'

'West'

Размерности массивов nam, x, n, mar заранее не задаются, а определяются в процессе чтения по числу строк.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: