- •Раздел 1 Основные понятия среды matlab
- •1. Начало работы в среде matlab
- •1.1. Характеристика среды matlab
- •1.2. Общие положения и правила работы в среде matlab
- •1.3. Работа в командном окне
- •1.4. Правила и особенности ввода математических выражений
- •1.5. Сохранение содержимого рабочего окна
- •2 Системные переменные и типы данных
- •2.1 Системные переменные
- •2.2. Типы данных. Описание основных типов
- •2.3. Комплексные числа
- •2.4. Символьные переменные
- •2.5. Массивы
- •2.5.1 Задание массивов
- •2.5.2 Доступ к элементам массивов
- •2.5.3 Функции обработки массивов
- •2.6 Тип данных структура (struct)
- •2.6.1 Задание структур
- •2.6.2 Функции обработки структур
- •2.7 Тип данных ячейка (сell)
- •2.8 Функции определения типов
- •2.9 Функции для работы со значениями даты и времени
- •2.10 Функции преобразования типов
- •3. Основные операции и математические функции matlab
- •3.1 Основные арифметические операции
- •3.2 Основные элементарные функции
- •Help имя_функции,
- •3.3 Операции отношения и логические операции
- •4 Операторы среды matlab
- •4.1 Условный оператор if
- •4.2 Условный оператор switch
- •4.3 Реализация циклических процессов
- •4.3.1 Оператор цикла while
- •4.3.2 Оператор цикла for
- •Pause – останавливает выполнение программы до момента нажатия любой клавиши на клавиатуре; pause(n) – останавливает выполнение программы на n секунд;
- •Примеры.
- •Как и в случае сценариев, к подпрограмме функции можно обратиться по имени, более того функции могут быть компонентами математических выражений и операндов, а также параметрами других функций.
- •5.4 Создание подпрограмм с переменным списком входных и выходных параметров
- •5.5 Локальные и глобальные переменные
- •5.6 Созданий функций пользователя и указателей на функции. Функции как аргументы функций.
- •5.8 Сообщения об ошибках
- •6 Ввод данных и работа с файлами
- •6.1 Использование рабочей области Workspace
- •6.2 Чтение и запись неформатированных файлов
- •6. 3 Работа с текстовыми и бинарными файлами
- •6.3.1 Команды открытия и закрытия файлов
- •6.3.2 Команды чтения и записи fread и fwrite
- •6.4 Операции над форматированными файлами
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).
Примеры.
>> 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. На
отрезке
выполните табулирование функции
и результат в виде таблицы (x,
y)
запишите в форматированный файл на
диск. Откройте созданный файл и выведите
содержимое на экран. Выведите только
первых три значения. Выведите только
пятое значение. Выведите последних два
значения.
2. Создайте структуру, содержащую информацию о студенте Stud. Запише в файл даныые о нескольких студентах. Выведите содержимое файла на екран. выведите информацию о втором студенте.
