Как открыть файл в матлабе

Обновлено: 07.07.2024

10. Чтение и запись файлов данных.

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

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

Начнём с числовых векторов и матриц. Работать будем с так называемыми бинарными ( не текстовыми ) файлами, которые сначала надо открыть с помощью предназначенной для этого функцией fopen системы MATLAB:

fid = fopen( 'имя-файла', 'флаг' )

где имя файла может предваряться полным путём к нему ( иначе файл должен располагаться в текущем каталоге MATLABа ). Второй параметр этой функции - так называемый флаг открытия файла, говорит о способе дальнейшей работы с файлом:

'rb' - только для чтения

'wb' - только для записи ( предыдущее содержимое теряется )

Вторая буква в этих примерах говорит о бинарном характере файлов. Возможен ещё флаг, разрешающий как чтение, так и запись файлов одновременно ( 'r+' ), но мы его здесь использовать не будем.

Функция fopen возвращает числовой идентификатор открытого файла, который надо использовать в качестве параметра для функций чтения и записи в этот файл. Если операция открытия файла не удалась ( это возможно как по причине отсутствия файла, так и по причине неправильного указания пути к нему на диске ), то функция fopen возвращает -1.

Всегда следует проверять возврат функции fopen:

fid = fopen( 'имя_файла', 'флаг' );

if( fid == -1 )

error( 'File is not opened' )

end

После того, как файл больше не требуется, его следует закрыть функцией fclose:

fclose( fid )

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

fwrite( fid, A, 'precision' )

где fid - файловый идентификатор, возвращаемый функцией fopen; A - вектор или матрица, чьи элементы подлежат записи в файл; строка 'precision' говорит о размере памяти, отводимой под вещественные числа. Это 8 байт или 64 бита, так что строка должна иметь вид 'float64'.

В следующем фрагменте кода создаются вектор-столбец a и матрица B размером 2x3, которые затем записываются в файл с именем 'dataTest.gqw' ( здесь расширение имени файла выбрано произвольно так, чтобы не совпасть с известными расширениями ):

a = [ 1; 2; 3 ]; B = [ 4 5 6; 7 8 9 ];

fid1 = fopen( 'dataTest.gqw', 'wb' );

fwrite( fid1, a, 'float64' );

fwrite( fid1, B, 'float64' );

fclose( fid1 );

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

fid1 = fopen( 'dataTest.gqw', 'rb' );

[ a , count ] = fread( fid1, [1 3], 'float64' );

[ B , count ] = fread( fid1, [2 3], 'float64' );

fclose( fid1 );

Легко убедиться, что прочитанные значения совпадают с ранее записанными. При этом число count равно числу реально прочитанных вещественных чисел. При чтении вектора a это число будет равно 3, а при чтении матрицы B - будет равно 6.

B =

4 5 6

7 8 9

count =

6

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

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

Для отслеживания позиции файлового указателя и работы с ним служат функции feof ( служит для индикации конца файла ), fseek ( устанавливает файловый указатель ), ftell (позволяет узнать значение текущего файлового указателя), frewind ( устанавливает файловый указатель на началдо файла ). Все эти функции имеют прозрачный смысл, поэтому мы их подробно не будем рассматривать. О них всегда можно разузнать в справочной системе MATLABа.

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

Несмотря на только что сказанное, текстовые переменные MATLABа можно записывать и в бинарные файлы. Важно только учесть, что каждый символ требует двух байт, поэтому нужно использовать флаг 'int16'.

Вот пример такой работы:

str1 = 'Hello'; str2 = 'World!';

fid1 = fopen( 'strTest.gqw', 'wb' );

fwrite( fid1, str1, 'int16' );

fwrite( fid1, str2, 'int16' );

fclose( fid1 );

В результате будет создан файл strTest.gqw, содержащий в бинарном формате содержимое двух строковых переменных. Их можно прочесть с помощью функции fread:

fid1 = fopen( 'strTest.gqw', 'rb' );

[ a , count ] = fread( fid1, 5, 'int16' );

[ b , count ] = fread( fid1, 6, 'int16' );

str1 = char( a' ); str2 = char( b' );

fclose( fid1 );

К прочитанным из файла числовым вектор-столбцам a и b сначала применяется операция транспонирования для перевода их в вектор-строки, а затем осуществляется преобразование к типу char.

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

str1 = 'Hello'; str2 = 'World!';

fid1 = fopen( 'strTest2.txt', 'w' );

fprintf( fid1, '%s\r\n%s\r\n', str1, str2 );

fclose( fid1 );

Одним вызовом функции fprintf удаётся записать сразу две строковые ( символьные ) переменные str1 и str2. Информацию об этом нужно располагать во втором параметре функции fprint в виде символов формата %s, означающих запись строк. Каждый из этих символов нужно завершать парой специальных символов \r\n, означающих "возврат каретки и перевод строки". Таким образом, каждая из этих двух строк при чтении файла любым стандартным текстовым редактором ( например, редактором Notepad ) будет показана на отдельной строке:


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

fid1 = fopen( 'strTest2.txt', 'r' );

str1 = fgetl( fid1 ); s

tr2 = fgetl( fid1 );

fclose( fid1 );

Легко убедиться, что прочитанные значения совпадают с ранее записанными в этот текстовый файл:


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

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

Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.

В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:

save<имя файла><имена переменных>

load<имя файла><имена переменных>

Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.

Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>)

<переменная>=fread(<идентификатор файла>, <размер>, <точность>)

где: <идентификатор файла>– это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:

<идентификатор файла>=fopen(<имя файла>,<режим работы>)

где: параметр <режим работы> может принимать значения, приведенные в таблице 1.

В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:

fclose(<идентификатор файла>)

С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.

Пример использования функций работы с файлами:

A=[1 2 3 4 5];

fid=fopen('my_file.dat', 'wb');% открытие файла на запись

fwrite(fid, A, 'double');% запись матрицы А в файл

fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:

feof(<идентификатор файла>)

Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen

Значение параметра <режим работы> Описание параметра
'r' чтение
'w' запись (стирает предыдущее содержимое файла)
'a' добавление (создает файл, если его нет)
'r+' чтение и запись (не создает файл, если его нет)
'w+' чтение и запись (очищает прежнее содержимое или создает файл, если его нет)
'a+' чтение и добавление (создает файл, если его нет)
'b' дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’

Описанные ранее функции работы с файлами позволяют записывать и считывать информацию по байтам, которые затем требуется правильно интерпретировать для преобразования их в числа или строки. В то же время выходными результатами многих программ являются текстовые файлы, в которых явным образом записаны те или иные числа или текст. Прочитать такой файл побайтно, а затем интерпретировать полученные данные довольно трудоемкая задача, поэтому для этих целей были специально разработаны функции форматированного чтения или записи информации: fscanf и fprintf, соответственно.




Функция чтения fscanfимеет следующий синтаксис:

[value, count]=fscanf(fid, format, size)

где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных

Функция записиfprintfимеет следующий синтаксис:

count=fprintf(fid, format, a,b. )

где:a,b,… – переменные для записи в файл.

Таблица 2- Список основных спецификаторов параметра formatдля функций fscanf() и fprintf()

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

В форматной строке могут бытьтакже использованы различные управляющие символы:

\r – возврат каретки;

\t – горизонтальная табуляция;

\n – переход на новую строку

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

Файлы – это довольно распространенные объекты системы MATLAB. О некоторых типах файлов уже говорилось в предшествующих главах. В этом уроке рассматриваются свойства файлов, которые не зависят от их типа и относятся к любым файлам.

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

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

  • Команда open имя, где имя должно содержать массив символов или символьную переменную, открывает файлы в зависимости от анализа параметра имя и расширения в имени имя:
    • переменная – открывает массив, названный по имени, в редакторе массивов (Array Editor);
    • .mat – открывает файл, сохраняет переменные в структуре в рабочей области;
    • .fig – открывает его в редакторе дескрипторонй графики Property Editor;
    • .m – открывает m-файл в редакторе-отладчике;
    • .mdl – открывает модель в Simulink;
    • .р – открывает, если он есть, m-файл с тем же именем;
    • .html – открывает HTML документ в браузере помощи.

    Если файлы с расширением существуют в пути MATLAB, то открывается тот файл, который возвращается командой which имя, если нет – то файл из файловой системы. Если файл не имеет расширение имени, то он открывается той программой, формат файлов которой был бы обнаружен функцией which ('имя файла') По умолчанию для всех файлов с окончаниями, отличными от вышеперечисленных, вызывается openother. Open вызывает функции орепххх, где ххх – расширение файла. Исключение – переменные рабочей области, для которых вызывается openvar, и рисунки, для работы с которыми вызывается openim. Создавая т-файлы с именем орепххх, пользователи могут изменять обработку файлов и добавлять новые расширения в список. Закрывать файлы, открытые при помощи open, нужно из редакторов, вызываемых ореnххх.

    • [FILENAME, PATHNAME] = uigetfile(FILTERSPEC. Title). Открывает диалог с именем Title и фильтром FILTERSPEC (например, массивом ячеек, содержащим расширения файлов) и возвращает файл, выбранный пользователем, и путь к нему. Возвращает FILENAME=0, если файл не существует или если пользователь нажал на Cancel. [FILENAME, PATHNAME] = uigetfile (FILTERSPEC, Title. X. Y) размещает окно диалога в точке X, Y (координаты в пикселях).
    [filename, pathname] = uigetfile( '*.m;*.fig;*.mat:*.mdl' , 'All MATLAB Files (*.m, *.fig, *.mat. *.mdl)' ).
    • Команда uiload открывает файл в диалоге, управляемом пользователем, с использованием команды load.

    Функция ui import запускает Мастер импорта (Import Wizard), импортирующий из файла в текущей папке или буфера обмена Windows. Она соответствует выбору Import Data из меню File или выбору Paste Special из меню Edit MATLAB.

    • ui import (FILENAME) – запускает Мастер Импорта, открывая файл FILENAME. Мастер импорта показывает данные для предварительного просмотра. В окне предварительного просмотра появляются данные и их представление в виде переменных MATLAB. Собственно данные, текст и заголовки представляются разными переменными MATLAB. Для данных ASCII вы должны удостовериться, что Мастер импорта распознал разделители столбцов. Самостоятельно он может распознать только символ табуляции, пробел, запятую или точку с запятой. Нужно щелкнуть мышью на кнопке Next и в следующем окне либо подтвердить выбор разделителя, сделанный Мастером, либо выбрать Other и ввести любой разделитель.
    • ui import (' -file') – вначале выводит диалог выбора файла.
    • ui import ('-pastespecial') – вначале выводит для предварительного просмотра содержимое буфера обмена Windows.
    • S = ui import (…) хранит результирующие переменные как поля структуры S.
    • Команда uisave – управляемое пользователем сохранение (команда save описана в уроке 2) с Windows диалогом.
    • Функция saveas – сохраняет рисунок или модель Simulink в желаемом формате на носителе информации или на устройстве, разрешенном print.
    • Функция saveas (H, 'FILENAME') – сохраняет данные в соответствии с командой дескрипторной графики Н в файле FILENAME. Формат файла определяется расширением имени FILENAME.
    • Функция saveas (H. 'FILENAME'. 'FORMAT') – выполняет то же, но с параметром FORMAT (формат задается тем же способом, что и расширение имени файла и может от него отличаться). FORMAT имеет приоритет перед расширением имени файла. Параметры функции:
      • 'fig' – сохранить рисунок (график) в двоичном fig-файле;
      • 'm' или 'mfig' – сохранить рисунок в двоичном fig-файле и создать m-файл для его загрузки;
      • 'mmat' – сохранить рисунок в m-файле как последовательность команд создания рисунка. Может не поддерживать новейшие графические функции.

      Команда или функция delete удаляет файл или объект графики.

      • delete имя файла удаляет файл текущей папки. Может быть использована *. Предпочтительно использование с записью в форме функции delete('mw файла'), когда имя файла – строка.
      • delete(H) удаляет графический объект с дескриптором Н. Если этот объект – окно, то оно предварительно закрывается.
      • Функция close(H) закрывает только графические окна. Для закрытия файлов необходимо использовать команду f close.

      Для записи файлов на диск служит команда save, используемая в довольно очевидных формах:

      save filename save filename var1 var2. save. option save( ' filename' . )

      Соответственно для считывания файлов с диска служит команда load:

      В этих командах имя файла указывается по правилам, принятым в операционных системах класса MS-DOS. Эти команды обычно дублируются кнопками панелей инструментов и браузером файлов.

      Чтобы открыть существующий файл или файлы в Редакторе, выберите опцию, которая достигает ваших целей, как описано в этой таблице.

      Открытый со связанным инструментом


      На Editor щелкает Live Editor или вкладка Home, в разделе File .

      Также можно дважды кликнуть файл в Браузере текущей папки.

      Например, эта опция открывает файл с .m или расширением .mlx в Редакторе и загружает MAT-файл в браузер Рабочей области.

      Открытый как текстовый файл

      Откройте файл в Редакторе как текстовый файл, даже если тип файла сопоставлен с другим приложением или инструментом.


      На вкладке Editor, в разделе File, нажимают Open и выбирают Open as Text.

      Это полезно, например, если вы импортировали разграниченный вкладкой файл данных ( .dat ) в рабочую область, и вы находите, что хотите добавить точку данных. Откройте файл как текст в Редакторе, сделайте свое сложение, и затем сохраните файл.

      Открытая функция из файла

      Откройте локальную функцию или файл функции из файла в Редакторе.

      Расположите курсор на имя в открытом файле, и затем щелкните правой кнопкой и выберите Open file-name из контекстного меню.

      Для получения дополнительной информации смотрите Открытый Файл или Переменная из Файла.

      Вновь откройте файл

      Вновь откройте недавно используемый файл.


      В нижней части Open выпадающий список выберите файл под Recent Files.


      Чтобы изменить количество файлов в списке, нажмите Preferences, и затем выберите MATLAB и Editor/Debugger. Под Most recently used file list, изменение значение для Number of entries.

      Вновь откройте файлы при запуске

      При запуске автоматически откройте файлы, которые были открыты когда предыдущий законченный сеанс работы с MATLAB.


      На вкладке Home, в разделе Environment, нажимают Preferences и выбирают MATLAB и Editor/Debugger. Затем выберите On restart reopen files from previous MATLAB session.

      Открытый файл, отображающийся в другом инструменте

      Перетащите файл от другого инструмента в Редактор.

      Открытый файл с помощью функции

      Например, введите следующее, чтобы открыть collatz.m :

      Если collatz.m не находится на пути поиска файлов или в текущей папке, используйте относительный или абсолютный путь для файла.

      Для специальных замечаний на платформе Macintosh смотрите Навигацию В Корневой папке MATLAB на Платформах Macintosh.

      Некоторые опции для вводных файлов не доступны в MATLAB Online .

      Сохраните файлы

      После того, как вы измените файл в Редакторе, звездочка (*) следует за именем файла. Эта звездочка указывает, что существуют несохраненные изменения в файле.

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

      Сохраните файл на диск и сохраните файл открытым в Редакторе.


      На вкладке Editor или Live Editor, в разделе File, нажатии кнопки .

      Переименуйте файл, сохраните его на диск и сделайте его активным документом Редактора. Исходный файл остается неизменным на диске.


      На вкладке Editor или Live Editor, в разделе File, нажимают Save и выбирают Save As.

      Задайте новое имя, введите, или и для файла, и затем нажмите Save.

      Сохраните файл на диск под новым именем. Исходный файл остается открытым и несохраненным.


      На вкладке Editor, в разделе File, нажимают Save и выбирают Save Copy As.

      MATLAB открывает диалоговое окно Select File for Backup.

      Задайте имя и тип для резервного файла, и затем нажмите Save.

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

      Все файлы остаются открытыми.


      На вкладке Editor, в разделе File, нажимают Save и выбирают Save All.

      Некоторые опции для того, чтобы сохранить файлы не доступны в MATLAB Online™ .

      Рекомендации на том, чтобы сохранить файлы

      В начале каждого сеанса работы с MATLAB, загрузок MATLAB и кэшей в памяти местоположения файлов в дереве папки matlabroot . Поэтому, если вы:

      Сохраните файлы к папкам matlabroot с помощью внешнего редактора, запустите rehash toolbox , прежде чем вы будете использовать файлы на текущем сеансе.

      Добавьте или удалите файлы из папок matlabroot с помощью операций файловой системы, запустите rehash toolbox , прежде чем вы будете использовать файлы на текущем сеансе.

      Измените существующие файлы в папках matlabroot с помощью внешнего редактора, запустите clear function-name , прежде чем вы будете использовать эти файлы на текущем сеансе.

      Для получения дополнительной информации смотрите rehash или Путь к Тулбоксу, Кэширующийся в MATLAB.

      Поддержка файлов

      Когда вы изменяете файл в Редакторе, Редактор сохраняет копию файла с помощью того же имени файла, но с расширением .asv каждые 5 минут. Резервная версия полезна, если вы имеете системные проблемы и теряете изменения, вы сделали к своему файлу. В таком случае можно открыть резервную версию, filename.asv , и затем сохранить его как filename.m , чтобы использовать последнюю хорошую версию filename .

      Примечание

      Live Editor и MATLAB Online автоматически не сохраняют копии файлов.


      Чтобы выбрать настройки, нажмите Preferences, и затем выберите MATLAB> Editor/Debugger> Backup Files на вкладке Home в разделе Environment. Вы можете затем:

      Включите или выключите функцию резервного копирования.

      Автоматически удалите резервные файлы, когда вы закроете соответствующий исходный файл.

      По умолчанию MATLAB автоматически удаляет резервные файлы, когда вы закрываете Редактор. Лучше держать отношения резервного копирования к файлу в стороне и текущий. Поэтому, когда вы переименовываете или удаляете файл, рассматриваете удаление или переименование соответствующего резервного файла.

      Укажите, что номер минут между резервным копированием сохраняет.

      Задайте расширение файла для резервных файлов.

      Задайте местоположение для резервных файлов

      Если вы редактируете файл в папке только для чтения и спине, настройкой Location является Source file directories, то Редактор не создает резервную копию файла.

      [Matlab] Операции с файлами в Matlab: fopen, fseek, fread, fclose и т. Д.

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

      1. Открытие и закрытие файла

      1) Откройте файл
      Перед чтением и записью файла необходимо использовать функцию fopen, чтобы открыть или создать файл, и указать режим работы для файла. Формат вызова функции fopen:
      fid = fopen (имя файла, «открытый метод»)
      Примечание: fid используется для хранения значения дескриптора файла. Если возвращаемое значение дескриптора больше 0, файл открывается успешно. В имени файла используется строка символов, чтобы указать файл данных, который нужно открыть. Распространенные способы открытия следующие:
       ‘r’: откройте файл в режиме только для чтения (режим по умолчанию), файл должен уже существовать.
       ‘r +’: откройте файл в режиме чтения-записи, после открытия сначала прочтите, а затем запишите. Файл должен уже существовать.
       ‘w’: записывать данные после открытия. Файл обновляется, если он уже существует; если он не существует, он создается.
       ‘w +’: откройте файл в режиме чтения-записи. Сначала читайте, потом пишите. Файл обновляется, если он уже существует; если он не существует, он создается.
       ‘a’: добавить данные в конец открытого файла. Если файл не существует, он создается.
       ‘a +’: после открытия файла сначала считайте данные, а затем добавьте данные. Если файл не существует, он создается.
      Кроме того, добавьте "t" после этих строк, например,'rt 'или'wt +', тогда файл будет открыт в текстовом режиме; если добавлен "b", то Открыть в двоичном формате, который также является методом открытия по умолчанию для функции fopen.

      2) Закройте файл
      Файл должен быть закрыт вовремя после операций чтения и записи, чтобы избежать потери данных. Используйте функцию fclose, чтобы закрыть файл. Формат вызова:
      sta=fclose(fid)
      Описание: эта функция закрывает файл, представленный fid. sta представляет собой код возврата операции закрытия файла. Если закрытие прошло успешно, возвращается 0, в противном случае - -1. Если вы хотите закрыть все открытые файлы, используйте fclose («все»).

      2. Операции чтения и записи двоичных файлов.

      1) Записывать двоичные файлы
      Функция fwrite записывает элементы матрицы в файл в соответствии с указанной точностью данных. Формат звонка:
      COUNT=fwrite(fid,A,precision)
      Описание: COUNT возвращает количество записанных элементов данных (по умолчанию), fid - дескриптор файла, A используется для хранения данных, записанных в файл, precision представляет точность данных, обычно используется Точность данных включает: char, uchar, int, long, float, double и т. Д. По умолчанию точность данных равна uchar, то есть беззнаковому формату символов.
      Пример 6.8 Сохранение двоичной матрицы в файл на диске.

      a=[1 2 3 4 5 6 7 8 9];
      fid = fopen (‘d: \ test.bin’, ‘wb’)% Откройте файл, записав двоичные данные
      fid =
      3%, значение которого больше 0, что означает успешное открытие

      fwrite(fid,a,‘double’)
      ans =
      9% означает, что записано 9 данных.

      fclose(fid)
      ans =
      0% означает, что выключение прошло успешно.

      2) Читать двоичные файлы
      Функция fread может считывать данные двоичного файла и сохранять их в матрице. Формат звонка:
      [A,COUNT]=fread(fid,size,precision)
      Описание: где A - матрица, используемая для хранения считанных данных, COUNT - количество возвращенных элементов данных, fid - дескриптор файла, а размер является необязательным. Если не выбран, Прочитать все содержимое файла; если этот параметр выбран, его значение может быть следующими: N (читать N элементов в вектор-столбец), inf (читать весь файл), [M, N] (читать данные в M × N Данные хранятся в столбцах). Precision используется для контроля точности записываемых данных, и его форма такая же, как у функции fwrite.

      3. Операции чтения и записи текстовых файлов.
      1) Прочитать текстовый файл
      Функция fscanf может считывать содержимое текстового файла и сохранять его в матрице в соответствии с указанным форматом. Формат звонка:
      [A,COUNT]=fscanf(fid,format,size)
      Описание: A используется для хранения считанных данных, COUNT возвращает количество прочитанных элементов данных, fid - это дескриптор файла, формат используется для управления форматом считанных данных и% В сочетании с символами формата распространенными символами формата являются: d (целое число), f (с плавающей точкой), s (строка), c (символ) и т. Д. Вы также можете вставить дополнительные символы между% и символами формата. Спецификатор формата, например описание ширины данных. Размер не является обязательным, он определяет порядок данных в матрице A. Он может принимать следующие значения: N (чтение N элементов в вектор-столбец), inf (чтение всего файла), [M, N] (чтение данных в В матрице M × N данные хранятся в столбцах).

      Использование fscanf в Matlab выглядит следующим образом:
      A=fscanf(fid,format)
      [A, count]=fscanf(fid,format,size)
      [A, count]=fscanf(fid,format,size)

      Лично наиболее часто используемая форма такова:
      data = fscanf(fid,format,size);
      , где данные - это массив прочитанного содержимого, а его размер определяется размером. size - вектор [mn], m - строка, n - столбец (обратите внимание, что здесь порядок чтения - сначала столбец, если вы не понимаете, вы можете увидеть пример ниже), если n - inf, это означает чтение до конца файла. . fid - это возвращаемое значение файла, открытого fopen, а format - это параметр форматирования (например, printf, scanf).

      Приведи небольшой пример:
      Путь + имя файла: d: \ moon.txt
      Содержание: 13,1,3.4

      Теперь, чтобы прочитать данные из moon.txt в массиве, вы можете использовать следующий метод:
      fid=fopen(‘d:\moon.txt’);
      data = fscanf (fid, ’% f,% f,% f’, [3, inf]);% используйте здесь одинарные кавычки
      fclose(fid);

      На данный момент данные в данных выглядят следующим образом: (3 строки и 4 столбца, элементы MATLAB расположены в порядке столбцов)

      Обычно нам может потребоваться ссылка на определенную строку или определенный столбец в массиве, чтобы нарисовать изображение, метод - данные (m, :) или данные (:, n), то есть получить m-ю строку или n-й столбец массива данных.

      2) Напишите текстовый файл
      Функция fprintf может записывать данные в текстовый файл в указанном формате. Формат звонка:
      fprintf(fid,format,A)
      Описание: fid - это дескриптор файла, который указывает файл, в который будет выполняться запись. format - это символ формата, используемый для управления форматом записываемых данных, который аналогичен функции fscanf. A используется для хранения данных. матрица.
      Пример 6.9. Создайте символьную матрицу и сохраните ее на диск, затем считайте и назначьте другой матрице.

      matlab читает текстовый файл
      fid=fopen(‘fx.txt’,‘r’);
      % получить номер файла
      [f,count]=fscanf(fid,’%f %f’,[12,90]);
      % Прочитать данные файла номер 1 в f. Где f - матрица [12 90]
      % Здесь ’% f% f’ представляет формат чтения данных, которые считываются как исходный тип данных.
      fclose(fid);
      % Закрыть файл

      Кроме того, некоторые файлы txt можно открывать с помощью load
      Предложение
      f=load('fx.txt)
      Я лично считаю, что первый способ лучше. Потому что иногда, особенно когда в одной строке fx.txt содержится несколько данных, использование load более проблематично.

      4. Расположение файла данных
      MATLAB предоставляет функции fseek и ftell, связанные с операциями позиционирования файлов. Функция fseek используется для определения местоположения указателя позиции файла, и ее формат вызова:
      status=fseek(fid, offset, origin)
      , где fid - дескриптор файла, смещение представляет количество байтов, перемещаемых указателем позиции, а значения OFFSET интерпретируются следующим образом:

      0 Move toward the end of the file.
      = 0 Do not change position.
      < 0 Move toward the beginning of the file.
      origin представляет исходную позицию перемещения указателя позиции, значения ORIGIN интерпретируются следующим образом:
      ‘bof’ or -1 Beginning of file
      ‘cof’ or 0 Current position in file
      ‘eof’ or 1 End of file。
      Если позиционирование выполнено успешно, возвращаемое значение статуса - 0, в противном случае возвращаемое значение - –1.

      Функция ftell возвращает текущую позицию указателя файла, и ее формат вызова:
      position=ftell (fid)
      Возвращаемое значение - это количество байтов от начала файла до текущей позиции указателя. Если возвращаемое значение равно –1, это означает, что текущая позиция файла не может быть получена.
      Пример:
      FID=fopen(‘sw.m’,‘r’)
      fseek(FID,10,-1)
      ans =
      0

      ftell(FID)
      ans =
      2180
      Указатель файла можно переместить за конец текущего файла, но не перед его началом; когда указатель перемещается за конец файла, если файл закрыт, размер файла автоматически увеличивается до размера файла. Размер, указанный указателем, позволяет легко создать большой файл с помощью этого метода, конечно, содержимое нового добавленного файла является случайным.

      [Приложение: Matlab читает исходный код файлов формата grd]
      clc;
      clear all;
      close all;
      fid=fopen([‘C:\Zhenghui_Code\testDLL\testForDLL\kms04ssh-egm96u.grd’],‘r’);

      head = fread (fid, 4, ‘uint8 => char’) ’;% Прочтите заголовок файла DSAA
      fscanf(fid,’\n’);

      nx = fscanf (fid, ’% d’, 1);% прочитано количество строк данных сетки nnx, количество столбцов nnz
      fp = fseek (fid, 1,0);% 1 означает, что указатель прочитанного файла сдвигается назад на 1 бит, а 0 означает, что указатель перемещается относительно текущей позиции
      ny=fscanf(fid,’%d’,1);
      fscanf(fid,’\n’);

      xmin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения x
      fseek (fid, 4,1);% 4 означает, что указатель прочитанного файла сдвинут назад на 4 бита, 1 означает, что ссылочная позиция перемещения указателя является концом файла
      xmax=fscanf(fid,’%f’,1);
      fscanf(fid,’\n’);

      ymin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения y
      fseek(fid,4,1);
      ymax=fscanf(fid,’%f’,1);
      fscanf(fid,’\n’);

      zmin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения z
      fseek(fid,4,1);
      zmax=fscanf(fid,’%f’,1);
      fscanf(fid,’\n’);

      for i = 1: ny% Обратите внимание, что Matlab хранит данные в порядке столбцов, сначала столбец 1, затем столбец 2, а затем последний столбец.
      for m=1:nx
      vp(i,m)=fscanf(fid,’%f’,1);
      fseek(fid,4,1);
      end
      fscanf(fid,’\n’);
      end

      Читайте также: