§ 9. Текстовые файлы
MatLab предлагает достаточно универсальные способы считывания данных из текстовых файлов и записи данных в требуемом виде в текстовый файл. Рассмотрим сначала оперирование с числовыми данными, представленными матрицами и векторами. Пусть в текстовом файле vec.dat в столбик записаны числа в соответствии с правилами MatLab, т.е. для отделения десятичных знаков используется точка, а для записи числа в экспоненциальном виде применяется символ e. Функция load позволяет занести содержимое файла vec.dat в числовой массив. Имя файла, заключенное в апострофы, указывается во входном аргументе load, а в выходном аргументе возвращается вектор-столбец 1 : » v=load(‘vec.dat’); Обратная операция — запись значений вектор-столбца в файл — производится при помощи команды save, аргументами которой являются: имя файла, переменная, и дополнительный параметр –ascii, означающий запись в текстовом виде: » v2=v.^2; » save ‘vec2.dat’ v2 –ascii Если числа в текстовом файле расположены в строку и разделены пробелами, то результатом считывания будет вектор-строка. Верно и обратное, запись значений вектор-строки приведет к занесению их в строку в текстовом файле. Запись матрицы командой save приводит к образованию текстового файла с таблицей чисел. Текстовый файл, в каждой строке которого находится одинаковое количество чисел, отделенных друг от друга пробелами, считывается в двумерный массив функцией load. Команды load и save предназначены только для простейшего ввода-вывода числовых данных. Разберем теперь более сложный случай, когда считываемая или записываемая информация содержит не только числа, но и текст. Работа с текстовыми файлами состоит из трех этапов:
- открытие файла;
- считывание или запись данных;
- закрытие файла.
Для открытия файла служит функция fopen, которая вызывается с двумя входными аргументами: именем файла и строкой, задающей способ доступа к файлу. Выходным аргументом fopen является идентификатор файла, т.е. переменная, которая впоследствии используется при любом обращении к файлу. Функция fopen возвращает –1, если при открытии файла возникла ошибка. Существует четыре основных способов открытия файла:
- f=fopen(‘myfile.dat’,’rt’) — открытие текстового файла myfile.dat только для чтения из него;
- f=fopen(‘myfile.dat’,’rt+’) — открытие текстового файла myfile.dat для чтения и записи данных;
- f=fopen(‘myfile.dat’,’wt’) — создание пустого текстового файла myfile.dat только для записи данных;
- f=fopen(‘myfile.dat’,’wt+’) — создание пустого текстового файла myfile.dat для записи и чтения данных.
При использовании двух последних вариантов следует соблюдать осторожность — если файл myfile.dat уже существует, то его содержимое будет уничтожено. После открытия файла появляется возможность считывать из него информацию, или заносить ее в файл. По окончании работы с файлом необходимо закрыть его при помощи fclose(f). Построчное считывание информации из текстового файла производится при помощи функции fgetl. Входным аргументом fgetl является идентификатор файла, а выходным — текущая строка. Каждый вызов fgetl приводит к считыванию одной строки и переводу текущей позиции в файле на начало следующей строки. Команды, приведенные на листинге 9.1, последовательно считывают из файла myfile.dat первые три строки в строковые переменные str1, str2, str3. Листинг 9.1. Считывание трех первых строк из текстового файла f=fopen(‘myfile.dat’,’rt’); str1=fgetl(f); str2=fgetl(f); str3=fgetl(f); fclose(f); При последовательном считывании рано или поздно будет достигнут конец файла, при этом функция fgetl вернет минус 1. Лучше всего перед считыванием проверять, не является ли текущая позиция в файле последней. Для этого предназначена функция feof, которая вызывается от идентификатора файла и возвращает единицу, если текущая позиция последняя и ноль, в противном случае. Обычно последовательное считывание организуется при помощи цикла while. Листинг 9.2 содержит файл-функцию viewfile, которая считывает строки файла, и выводит их в командное окно. Листинг 9.2. Файл-функция viewfile function viewfile(fname) f=fopen(fname,’rt’); while feof(f)==0 s=fgetl(f); disp(s) end fclose(f); Вызов viewfile(‘viewfile.m’) приводит к отображению текста самой файл-функции в командном окне. Строки записываются в текстовый файл при помощи функции fprintf, ее первым входным аргументом является идентификатор файла, а вторым — добавляемая строка. Символ \n служит для перевода строки. Если поместить его в конец добавляемой строки, то следующая команда fprintf будет осуществлять вывод в файл с новой строки, а если \n находится в начале, то текущая команда fprintf выведет текст с новой строки. Например, последовательность команд (листинг 9.3) приведет к появлению в файле my.txt текста из двух строк (листинг 9.4). Листинг 9.3. Вывод строк в текстовый файл f=fopen(‘my.txt’,’wt’); fprintf(f,’текст ‘); fprintf(f,’еще текст\n’); fprintf(f,’а этот текст с новой строки’); fclose(f); Листинг 9.4. Результат работы операторов листинга 9.3 текст еще текст а этот текст с новой строки Аналогичного результата можно добиться, переместив \n из конца строки второй функции fprintf в начало строки третьей функции fprintf. Аргументом fprintf может быть не только строка, но и строковая переменная. В этом случае для обеспечения вывода с новой строки ее следует сцепить со строкой ‘\n’. Строка, предназначенная для вывода в текстовый файл, может содержать как текст, так и числа. Часто требуется выделить определенное количество позиций под число и вывести его в экспоненциальном виде или с плавающей точкой и с заданным количеством цифр после десятичной точки. Здесь не обойтись без форматного вывода при помощи fprintf, обращение к которой имеет вид: fprintf(идентификатор файла, ‘форматы’, список переменных) В списке переменных могут быть как числовые переменные (или числа), так и строковые переменные (или строки). Второй аргумент является строкой специального вида с форматами, в которых будут выводится все элементы из списка. Каждый формат начинается со знака процента. Для вывода строк используется формат s, а для вывода чисел — f (с плавающей точкой) или e (экспоненциальный). Число перед s указывает количество позиций, отводимых под вывод строки. При выводе значений числовых переменных перед f или e ставится два числа, разделенных точкой. Первое из них означает количество позиций, выделяемых под все значение переменной, а второе — количество знаков после десятичной точки. Таким образом, под каждый из элементов списка отводится поле определенной длины, выравнивание в котором по умолчанию производится по правому краю. Для выравнивания по левому краю следует после знака процента поставить знак минус. Ниже приведены варианты вызова fprintf и результаты, незаполненные позиции после вывода (пробелы) обозначены символом ○. fprintf(f,’%6.2f’, pi) ○○3.14 fprintf(f,’%-6.2f’, pi) 3.14○○ fprintf(f,’%14.4e’, exp(-5)) ○○○6.7379e-003 fprintf(f,’%-14.4e’, exp(-5)) 6.7379e-003○○○ fprintf(f,’%8s’, ‘текст’) ○○○текст fprintf(f,’%-8s’, ‘текст’) текст○○○ В случае, когда зарезервированного поля не хватает под выводимую строку или число, MatLab автоматически увеличивает длину поля 1 , например: fprintf(f,’%5.4e’, exp(-5)) 6.7379e-003 При одновременном выводе чисел и текста пробелы могут появляться из-за неполностью заполненных полей, выделенных как под числа, так и под строки. Приведенные ниже операторы и результат их выполнения демонстрируют расположение полей в строке текстового файла. Волнистой линией подчеркнуты поля, выделенные под числа, а прямой — под строки, символ ○ по-прежнему обозначает пробелы. x=0.55; fprintf(f,’%-5s%6.2f%6s%20.8e’,’x=’,x,’y=’,exp(x)) x=○○○○○0.55○○○○y=○○○○○1.73325302e+000 Форматный вывод удобен при формировании файла с таблицей результатов. Предположим, что необходимо записать в файл f.dat таблицу значений функции для заданного числа n значений
, отстоящих друг от друга на одинаковое расстояние. Файл с таблицей значений должен иметь такую структуру, как показано на листинге 9.5. Листинг 9.5. Текстовый файл с таблицей значений функции f(0.65)=2.55691256e-001 f(0.75)=3.83421803e-001 f(0.85)=5.42800093e-001 f(0.95)=7.34107493e-001 f(1.05)=9.56334106e-001 Очевидно, что следует организовать цикл от начального значения аргумента до конечного с шагом, соответствующим заданному числу точек, а внутри цикла вызывать fprintf с подходящим списком вывода и форматами. Символ \n, предназначенный для перевода строки, помещается в конец строки с форматами (см. листинг 9.6) . Листинг 9.6. Файл-функция tab, выводящая таблицу значений функции function tab(a,b,n) h=(b-a)/(n-1); f=fopen(‘f.dat’,’wt’); for x=a:h:b fprintf(f,’%2s%4.2f%2s%15.8e\n’, ‘f(‘,x,’)=’,x^2*sin(x)) end fclose(f); Обратимся теперь к считыванию данных из текстового файла. Функция fscanf осуществляет обратное действие по отношению к fprintf. Каждый вызов fscanf приводит к занесению данных, начинающихся с текущей позиции, в переменную. Тип переменной определяется заданным форматом. В общем случае, обращение к fscanf имеет вид: a=fscanf(идентификатор файла, ‘формат’, число считываемых элементов) Для считывания строк используется формат %s, для целых чисел — %d, а для вещественных — %g. Предположим, что файл exper.dat содержит текст, приведенный на листинге 9.7. Данные отделены друг от друга пробелами. Требуется считать дату проведения эксперимента (число, месяц и год) в подходящие переменные, а результаты занести в числовые массивы TIME и DAT. Листинг 9.7. Файл с данными exper.dat Результаты экспериментов 10 мая 2002 t= 0.1 0.2 0.3 0.4 0.5 G= 3.02 3.05 2.99 2.84 3.11 Считывание разнородных данных (числа, строки, массивы) требует контроля, который достигается применением форматов. Первые два элемента файла exper.dat являются строками, следовательно можно сразу занести их в одну строковую переменную head. Очевидно, надо указать формат %s и число 2 считываемых элементов 1 . Далее требуется считать целое число 10, строку ‘мая’ и снова целое число 2002. Обратите внимание, что перед заполнением массива TIME еще придется предусмотреть считывание строки ‘t=’. Теперь все готово для занесения пяти вещественных чисел в вектор-столбец TIME при помощи формата %g. Данные из последней строки файла exper.dat извлекаются аналогичным образом (листинг 9.8). Листинг 9.8. Применение fscanf для считывания данных f=fopen(‘exper.dat’); head=fscanf(f,’%s’,2) data=fscanf(f,’%d’) month=fscanf(f,’%s’,1) year=fscanf(f,’%d’) str1=fscanf(f,’%s’,1) TIME=fscanf(f,’%g’,5) str2=fscanf(f,’%s’,1) DATA=fscanf(f,’%g’,5) fclose(f); Информация в текстовом файле может быть представлена в виде таблицы. Для считывания такой информации следует использовать массив структур с подходящим набором полей. Считывание всей информации реализуется в цикле while, в условии которого производится проверка на достижение конца файла при помощи функции feof. Функция fscanf предоставляет возможность считывать числа из текстового файла не только в вектор-столбец, но и массив заданных размеров. Расположение чисел по строкам в файле не имеет значения. Размеры формируемого массива указываются в векторе в третьем входном аргументе fscanf. Рассмотрим считывание числовых данных из файла matr.txt (листинг 9.9). Листинг 9.9. Текстовый файл matr.txt с матрицей 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 0.2 0.4 0.6 0.8 Функция fscanf формирует столбец матрицы, последовательно считывая числа из файла (т. е. построчно). Следовательно, для заполнения матрицы с тремя строками и четырьмя столбцами, необходимо считать данные из файла в массив четыре на три, а затем транспонировать его (листинг 9.10). Листинг 9.10. Считывание матрицы из текстового файла f=fopen(‘matr.txt’); M=fscanf(f,’%g’, [4 3]); M=M’ fclose(f) Обратите внимание, что массив может иметь размеры не только 3 на 4. Поскольку данные считываются подряд, то они могут быть занесены и в массив 2 на 6, и 4 на 3 и т. д.
29.03.2015 295.94 Кб 47 Графика и визуализация данных.doc
29.03.2015 50.18 Кб 50 Массивы структур и массивы ячеек.doc
29.03.2015 390.14 Кб 45 Матрицы.doc
29.03.2015 69.12 Кб 40 Программирование.doc
29.03.2015 49.66 Кб 56 Работа со строками.doc
29.03.2015 63.49 Кб 85 Текстовые файлы.doc
29.03.2015 70.14 Кб 76 Файл-функции и файл-программы .doc
Ограничение
Для продолжения скачивания необходимо пройти капчу:
Импорт и экспорт данных
Функция dlmread (чтение из текстовых файлов) предназначена для чтения матриц из текстовых файлов. Первый аргумент функции – имя файла. Результат записывается в матрицу.
>> a = dlmread('mat1.txt') a = 1 2 3 4 5 6 7 8 9 10 11 12
Вторым аргументом можно явно указать разделитель чисел в файле, например ‘,’
>> b = dlmread('mat2.txt',',');
Чтобы узнать размер прочитанной матрицы по каждому измерению используется функция size, которая возвращает массив двух значений: количество прочитанных строк и столбцов:
>> size(b) ans = 3 2
Чтобы узнать общее число прочитанных чисел можно перемножив размеры матрицы, используя функцию prod
>> prod(size(b)) ans = 6
или использовать функцию numel (количество всех элементов)
>> numel(b) ans = 6
Третий и четвертый аргумент dlmread смещение строки и столбца, начиная с которых нужно начинать считывать данные из файла. Например, чтобы пропустить 1 строку и один столбец, необходимо вызвать функцию со следующими дополнительными параметрами
>> b = dlmread('mat2.txt',',', 1, 1) b = 5 6 8 9 11 12
Чтение данных из Excel файлов
Для чтение данных из XLS файлов используется функция xlsread
>> xlsNum = xlsread('Данные.xlsx'); >> xlsNum 5 6 8 9 11 12
### Функция readtable
Функция позволяет импортировать таблицы из файлов различных форматов. В отличие от результата работы функции xlsread результатом работы функции readtable является объект table, который содержит дополнительную информацию о таблице: об именах столбцов, строк. Без дополнительных указаний функция readtable считает, что в первой строке таблицы записаны имена её столбцов.
В рабочем каталоге MATLAB находится xls-файл следующего на листе “Лист1” которого находятся следующие данные:

Результатом работы функции readtable будет таблица (объект table)
>> data = readtable('Книга1.xlsx') data = 3×3 table Var1 COL1 COL2 ______ ____ ____ 'ROW1' 1.5 2 'ROW2' 1.6 3 'ROW3' 1.9 4
Первая строка в первом столбце таблицы не содержит никаких значений (ячейка А1 пустая), поэтому первому столбцу было присвоено имя автоматически Var1. Второй и третий столбцы в таблице имеют имена COL1 и COL2 соответственно. Функция readtable рассматривает эти значения как имена столбцов. Если такое поведение функции readtable нежелательно, то можно передать функции значение ‘ReadVariableNames’ равное false
>> data = readtable('Книга1.xlsx', 'ReadVariableNames', false) data = 4×3 table Var1 Var2 Var3 ______ ______ ______ '' 'COL1' 'COL2' 'ROW1' '1.5' '2' 'ROW2' '1.6' '3' 'ROW3' '1.9' '4'
Видно, что в этом случае, поскольку столбцы исходной таблицы в таком представлении содержат неоднородные данные (и числа и строки), все значения в столбцах рассматриваются как строковые без попыток их преобразования в числовые значения. Для корректного чтения данных из таблицы ‘Книга1.xlsx’ необходимо использовать поведение функции readtable по умолчанию, т.е.
>> data = readtable('Книга1.xlsx') data = 3×3 table Var1 COL1 COL2 ______ ____ ____ 'ROW1' 1.5 2 'ROW2' 1.6 3 'ROW3' 1.9 4
В этом случае можно получить содержимое столбца, используя его имя. Например data.COL1 представляет собой матрицу столбец
>> data.COL1 ans = 1.5000 1.6000 1.9000
Столбец data.Var1 это матрица ячеек, содержащая строковые значения
>> data.Var1 ans = 3×1 cell array 'ROW1'> 'ROW2'> 'ROW3'>
Список имен столбцов содержится в атрибуте (свойстве) таблицы data.VariableNames, которое считывается следующим образом
>> data.Properties.VariableNames ans = 1×3 cell array 'Var1'> 'COL1'> 'COL2'>
Для того, чтобы значения в первом столбце рассматривались как имена строк, необходимо использовать опцию ReadRowNames
>> data = readtable('Книга1.xlsx','ReadRowNames',true) data = 3×2 table COL1 COL2 ____ ____ ROW1 1.5 2 ROW2 1.6 3 ROW3 1.9 4
Для чтения извлечения данных из строки по её имени используется следующий синтаксис
>> data('ROW1',:) ans = 1×2 table COL1 COL2 ____ ____ ROW1 1.5 2
Результатом является объект типа table. Можно извлечь несколько строк по их именам, например так
>> data('ROW1', 'ROW2'>,:) ans = 2×2 table COL1 COL2 ____ ____ ROW1 1.5 2 ROW2 1.6 3
Чтобы извлечь данные в виде матрицы необходимо использовать свойство таблицы Variables
>> data('ROW1',:).Variables ans = 1.5000 2.0000
Для исходной таблицы это свойство вернет все числовые значения в виде матрицы
>> data.Variables ans = 1.5000 2.0000 1.6000 3.0000 1.9000 4.0000
Экспорт данных
Сохранение таблицы в файле ‘data.txt’
writetable(data,'data.txt')
Сохранение в файле имён строк
writetable(data,'data.txt','WriteRowNames',true)
© 2023. All rights reserved.
Операции с двоичными файлами MatLab
Двоичными, или бинарными, называют файлы, данные которых представляют собой машинные коды. Основные операции с такими кодами перечислены ниже.
fopen(filename, permission) — открывает файл с именем filename и параметром, определенным в permission, и возвращает идентификатор fid со значением: 0 — чтение с клавиатуры (permission установлено в ‘r’); 1 — вывод на дисплей (permission установлено в ‘а’); 2 — вывод сообщения об ошибке (permission установлен в ‘ а’); -1 — неудача в открытии файла с выводом сообщения message о типе ошибки. Идентификатор fid часто используется в качестве аргумента другими функциями и программами ввода-вывода. Имя файла filename может содержать путь к файлу.
Если открываемый для чтения файл не найден в текущем каталоге, то функция fopen осуществляет поиск файла по пути, указанном в MATLAB.
Параметр permission может принимать одно из следующих основных значений (другие см. в справочной системе):
‘r’ — открытие файла для чтения (по умолчанию);
‘ r+’ — открытие файла для чтения и записи;
‘w’ — удаление содержимого существующего файла или создание нового и открытие его для записи;
Добавление к этой строке ‘ b’ (подразумевается по умолчанию) предписывает системе открыть файл в двоичном режиме.
Добавление же вместо b к этой строке ‘ t’, например ‘ rt’, в операционных системах, которые имеют различие между текстовыми и двоичными файлами, предписывает системе открыть файл в текстовом режиме. Например, во всех версиях MATLAB для Windows/MS-DOS и VMS нельзя открыть текстовый файл без параметра ‘ rt’. При вводе файлов с использованием fopen в текстовом режиме удаляются все символы «возврат каретки» перед символом новой строки.
[fid,message] = fopentfilename.permission,format) — открывает файл, как описано выше, возвращая идентификатор файла и сообщение. Кроме того, значение параметра format позволяет точно определить числовой формат. Возможно 8 форматов, описание которых можно найти в справочной системе. В частности, строка format может иметь значения ‘native’ (формат компьютера, на котором установлена система), ‘vax’, ‘сгау’ (компьютеры VAX и Cray) и т. д.
Определенные вызовы функций fread или fwrite могут отменить числовой формат, заданный при вызове функции fopen.
fids = fopen С all’) — возвращает вектор-строку, содержащую идентификаторы всех открытых файлов, не включая стандартные потоки О, 1 и 2. Число элементов вектора равно числу открытых пользователем файлов;
[filename,permission,format] -fopen(fid) — возвращает полное имя файла, строку .permission и строку format. При использовании недопустимых значений fid возвращаются пустые строки для всех выходных аргументов.
Команда fclose закрывает файл. Она имеет следующие варианты.
status = fclose(fid) — закрывает файл, если он открыт. Возвращает статус файла status, равный 0, если закрытие завершилось успешно, и -1 в противном случае. Аргумент fid — это идентификатор, связанный с открытым файлом (см. функцию fopen для более подробного описания);
status = fclose( ‘all’) закрывает все открытые файлы. Возвращает 0 в случае успешного завершения и -1 — в противном случае.
Пример открытия и закрытия файла:
» fid=fopen(‘c:\ex’.’а+’) fid = 4
[A,count] = fread(fid,size,precision) — считывает двоичные данные из заданного файла и помещает их в матрицу А. Выходной аргумент count содержит число удачно считанных элементов. Значение идентификатора fid — это целое число, возвращенное функцией fopen; size — аргумент, определяющий количество считываемых данных. Если аргумент size не определен, функция f read считывает данные до конца файла.
Используются следующие параметры size:
n — чтение n элементов в вектор-столбец;
inf — чтение элементов до конца файла и помещение их в вектор-столбец, содержащий такое же количество элементов, что и в файле;
[m.n] — считывает столько элементов, сколько нужно для заполнения матрицы тхп.
Заполнение происходит по столбцам. Если элементов в файле мало, то матрица дополняется нулями. Если считывание достигает конца файла, не заполнив матрицу необходимого размера, то матрица дополняется нулями. Если происходит ошибка, чтение останавливается на последнем считанном значении. Параметр precision — строка, определяющая числовую точность считывания значений, она контролирует число считанных бит для каждого значения и интерпретирует эти биты как целое число, число с плавающей запятой или как символ
[A.count] = fread(fid,size.precision,skip) — включает произвольный аргумент skip, который определяет число байтов, которые необходимо пропустить после каждого считывания. Это может быть полезно при извлечении данных г несмежных областях из записей фиксированной длины. Если precision имеет битовый формат, такой как ‘bitN 1 или ‘ubitN’, значение skip определяется ~ битах. Обширный список возможных значений параметра precision можн найти в справочной системе MATLAB;
count=fwrite(fid,A,precision) — записывает элементы матрицы А в файл, представляя их с заданной точностью. Данные записываются в файл по столбцам, выходной аргумент count содержит число удачно записанных элементов. Значение идентификатора fid — это целое число, полученное при использовании функции f open. Добавляет символы «возврат каретки» перед началом новой строки;
count=fwrite(fid.A,precision,skip) — делает то же, но включает произвольный аргумент skip, который определяет число байтов, которые надо пропустить перед каждой записью. Это полезно при вставке данных в несмежные области в записях фиксированной длины. Если precision имеет битовый формат, такой как ‘bitN’ или ‘ubitN’, значение skip определяется в битах.
MATLAB – импорт данных
Загружает данные в массив A из файла, обозначенного именем файла .
A = importdata (‘- pastespecial’)
Загружает данные из системного буфера обмена, а не из файла.
A = importdata (___, delimiterIn)
Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.
A = importdata (___, delimiterIn, headerlinesIn)
Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .
[A, delimiterOut, headerlinesOut] = importdata (___)
Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.
A = importdata (имя файла)
Загружает данные в массив A из файла, обозначенного именем файла .
A = importdata (‘- pastespecial’)
Загружает данные из системного буфера обмена, а не из файла.
A = importdata (___, delimiterIn)
Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.
A = importdata (___, delimiterIn, headerlinesIn)
Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .
[A, delimiterOut, headerlinesOut] = importdata (___)
Возвращает обнаруженный символ разделителя для входного файла ASCII в delimiterOut и обнаруженное количество строк заголовка в headerlinesOut , используя любой из входных аргументов в предыдущих синтаксисах.
По умолчанию Octave не поддерживает функцию importdata () , поэтому вам придется искать и устанавливать этот пакет, чтобы следующие примеры работали с вашей установкой Octave.
Пример 1
Давайте загрузим и отобразим файл изображения. Создайте файл сценария и введите в нем следующий код –
filename = 'smile.jpg'; A = importdata(filename); image(A);
Когда вы запускаете файл, MATLAB отображает файл изображения. Однако вы должны сохранить его в текущем каталоге.

Пример 2
В этом примере мы импортируем текстовый файл и указываем разделитель и заголовок столбца. Давайте создадим ASCII-файл, разделенный пробелами, с заголовками столбцов с именем weeklydata.txt .
Наш текстовый файл weeklydata.txt выглядит так –
SunDay MonDay TuesDay WednesDay ThursDay FriDay SaturDay 95.01 76.21 61.54 40.57 55.79 70.28 81.53 73.11 45.65 79.19 93.55 75.29 69.87 74.68 60.68 41.85 92.18 91.69 81.32 90.38 74.51 48.60 82.14 73.82 41.03 0.99 67.22 93.18 89.13 44.47 57.63 89.36 13.89 19.88 46.60
Создайте файл сценария и введите в нем следующий код –
filename = 'weeklydata.txt'; delimiterIn = ' '; headerlinesIn = 1; A = importdata(filename,delimiterIn,headerlinesIn); % View data for k = [1:7] disp(A.colheaders1, k>) disp(A.data(:, k)) disp(' ') end
Когда вы запускаете файл, он показывает следующий результат –
SunDay 95.0100 73.1100 60.6800 48.6000 89.1300 MonDay 76.2100 45.6500 41.8500 82.1400 44.4700 TuesDay 61.5400 79.1900 92.1800 73.8200 57.6300 WednesDay 40.5700 93.5500 91.6900 41.0300 89.3600 ThursDay 55.7900 75.2900 81.3200 0.9900 13.8900 FriDay 70.2800 69.8700 90.3800 67.2200 19.8800 SaturDay 81.5300 74.6800 74.5100 93.1800 46.6000
Пример 3
В этом примере давайте импортируем данные из буфера обмена.
Скопируйте следующие строки в буфер обмена –
Математика проста
Создайте файл сценария и введите следующий код –
A = importdata('-pastespecial')
Когда вы запускаете файл, он показывает следующий результат –
A = 'Mathematics is simple'
Низкоуровневый файловый ввод / вывод
Функция importdata является высокоуровневой функцией. Низкоуровневые функции ввода / вывода файлов в MATLAB позволяют максимально контролировать чтение или запись данных в файл. Однако эти функции нуждаются в более подробной информации о вашем файле для эффективной работы.
MATLAB предоставляет следующие функции для операций чтения и записи на уровне байтов или символов:
| функция | Описание |
|---|---|
| fclose | Закройте один или все открытые файлы |
| feof | Тест на конец файла |
| FERROR | Информация об ошибках файлового ввода-вывода |
| fgetl | Чтение строки из файла, удаление символов новой строки |
| fgets | Читать строку из файла, сохраняя символы новой строки |
| Еореп | Откройте файл или получите информацию об открытых файлах |
| fprintf | Записать данные в текстовый файл |
| Fread | Чтение данных из двоичного файла |
| frewind | Переместить индикатор положения файла в начало открытого файла |
| fscanf | Читать данные из текстового файла |
| FSEEK | Переместить в указанную позицию в файле |
| ftell | Положение в открытом файле |
| FWRITE | Записать данные в двоичный файл |
Импорт текстовых файлов данных с низкоуровневым вводом / выводом
MATLAB предоставляет следующие функции для низкоуровневого импорта файлов текстовых данных –
- Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.
- Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.
- Функция fread считывает поток данных на уровне байтов или битов.
Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.
Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.
Функция fread считывает поток данных на уровне байтов или битов.
пример
У нас есть текстовый файл данных «myfile.txt», сохраненный в нашем рабочем каталоге. Файл хранит данные об осадках за три месяца; Июнь, июль и август за 2012 год.
Данные в myfile.txt содержат повторные наборы измерений времени, месяца и количества осадков в пяти местах. Данные заголовка хранят количество месяцев M; таким образом, у нас есть M наборов измерений.
Файл выглядит так –
Rainfall Data Months: June, July, August M = 3 12:00:00 June-2012 17.21 28.52 39.78 16.55 23.67 19.15 0.35 17.57 NaN 12.01 17.92 28.49 17.40 17.06 11.09 9.59 9.33 NaN 0.31 0.23 10.46 13.17 NaN 14.89 19.33 20.97 19.50 17.65 14.45 14.00 18.23 10.34 17.95 16.46 19.34 09:10:02 July-2012 12.76 16.94 14.38 11.86 16.89 20.46 23.17 NaN 24.89 19.33 30.97 49.50 47.65 24.45 34.00 18.23 30.34 27.95 16.46 19.34 30.46 33.17 NaN 34.89 29.33 30.97 49.50 47.65 24.45 34.00 28.67 30.34 27.95 36.46 29.34 15:03:40 August-2012 17.09 16.55 19.59 17.25 19.22 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67 17.54 11.45 13.48 22.55 24.01 NaN 21.19 25.85 25.05 27.21 26.79 24.98 12.23 16.99 18.67
Мы импортируем данные из этого файла и отображаем эти данные. Сделайте следующие шаги –
- Откройте файл с помощью функции fopen и получите идентификатор файла.
- Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.
- Чтобы пропустить буквенные символы в файле, включите их в описание формата. Чтобы пропустить поле данных, используйте звездочку (‘*’) в спецификаторе. Например, чтобы прочитать заголовки и вернуть единственное значение для M, мы пишем –
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
Откройте файл с помощью функции fopen и получите идентификатор файла.
Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.
Чтобы пропустить буквенные символы в файле, включите их в описание формата. Чтобы пропустить поле данных, используйте звездочку (‘*’) в спецификаторе.
Например, чтобы прочитать заголовки и вернуть единственное значение для M, мы пишем –
По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.
Мы создадим структуру с именем mydata в рабочей области для хранения данных, считанных из файла. Эта структура имеет три поля – время , месяц и массив raindata .
Создайте файл сценария и введите в нем следующий код –
filename = '/data/myfile.txt'; rows = 7; cols = 5; % open the file fid = fopen(filename); % read the file headers, find M (number of months) M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1); % read each set of measurements for n = 1:M mydata(n).time = fscanf(fid, '%s', 1); mydata(n).month = fscanf(fid, '%s', 1); % fscanf fills the array in column order, % so transpose the results mydata(n).raindata = . fscanf(fid, '%f', [rows, cols]); end for n = 1:M disp(mydata(n).time), disp(mydata(n).month) disp(mydata(n).raindata) end % close the file fclose(fid);
Когда вы запускаете файл, он показывает следующий результат –
