Импорт и экспорт данных
Функция 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 – импорт данных
Загружает данные в массив 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);
Когда вы запускаете файл, он показывает следующий результат –
Чтение и запись текстовых файлов
Система MATLAB имеет ряд команд для работы с файлами вида *.txt, *.html, *.m и *.mat.
Команда/ореи. Она дает доступ к файлу типа *.txt, *.html, *.m и *.mat. Формат команды
Fid=fopen [‘имя файла’] [‘мода’].
Переменная Fid называется файловым идентификатором. Она может иметь любое имя, разное для разных файлов. Переменная Fid принимает значение 1, если доступ открыт и значение -1, если доступ к файлу невозможен. Команда fopen применяется как для уже существующих файлов, так и для файлов, которые будут записаны. Мода может быть следующей.
Таблица 1.2.3. Мода открытия файла
Мода Описание
‘ rt’ Открытие файла для чтения (по умолчанию)
‘ wt’ Открытие файла, или создание нового для записи. Если файл существует, то он будет удален без предупреждения, вместо него создается новый пустой файл с тем же именем
‘ at’ Открытие файла, или создание нового для записи. Если файл существует, то добавление данных в конец файла
‘ rt+’ Открытие файла для чтения и записи. Если файл существует, то новые данные будут записаны сначала, но место старых данных
‘ wt+’ Открытие файла для чтения и записи. Если файл существует, то он будет удален без предупреждения, вместо него создается новый пустой файл с тем же именем
‘ at+’ Открытие файла, или создание нового для чтения и записи, добавление данных в конец файла
Файл filename должен быть либо в текущем каталоге, либо иа путях MATLAB, либо должен быть указан полный путь. По умолчанию новый файл записывается в текущий каталог. Команда fopen открывает и бинарные файлы *.mat, в этом случае мода не содержит буквы ‘ t’.
Команда fclose. Закрывает доступ к открытому ранее файлу, fclose(fid) -закрытие файла с идентификатором fid, fclosc(all)) — закрытие всех открытых файлов.
Команда fscanf. Чтение форматированных данных из файла, к которому открыт доступ командой fopen. Формат команды
А = fscanf(fid, ‘format’,size)
Параметр size определяет размерность массива в MATLAB, который будет создан при чтении данных из файла с идентификатором fid. Параметр size может иметь вид:
- • п — чтение п элементов в столбец;
- • inf — чтение элементов в столбец до конца;
- • [п ш] — чтение в матрицу размера п-на-ш.
Отметим, что команда fscanf читает данные из файла по строкам, а записывает их в массив MATLAB по столбцам так, как указано в size. MATLAB читает данные из указанного файла в соответствии с заданным форматом. Параметр format может быть следующим:
Таблица 1.2.4. Формат чтения
СП о° 4-І оо О t Ф
Числа с плавающей запятой (экспоненциальный, с фиксированной запятой и компактный вид)
Целое число со знаком
Восьмеричное целое число со знаком
Ряд символов без пробелов
Десятичное целое число со знаком
Шестнадцатеричное целое число со знаком
Команда fprint. Запись форматированных данных в файл, к которому открыт доступ командой fopen. Формат команды
Здесь fid есть идентификатор открытого ранее файла. Имя файла указано при его открытии. А — массив, который будет записан в файл. Отмстим, что команда fprint читает данные из массива MATLAB по столбцам, а пишет их в файл по строкам.
MATLAB пишет данные из указанного массива в файл в соответствии с заданным форматом. Строка формата указывает к какому виду следует преобразовать данные для записи. Строка формата записи начинается с символа (%) и содержит следующие необходимые и дополнительные и элементы:
- • флаги (дополнительно);
- • поля ширины и точности (дополнительно);
- • символ преобразования (необходим).
Например, в записи «%-12.5е» знак «минус» есть флаг, число 12 определяет ширину поля (общее количество цифр), число 5 — это количество знаков после запятой и, наконец, буква «е» определяет, к какому типу будут преобразованы данные для записи.
Кроме того, применяются символы, которые управляют процессом вывода:
Таблица 1.2.5. Формат вывода данных
Формат Описание
п Переход на новую строку
Ь Возврат назад на один символ
Пробелы в строке формата записываются как пробелы
Возможные флаги указаны в табл. 1.2.6.
Таблица 1.2.6. Флаги команды fprint
Символ Описание
Знак минус (-) Левое выравнивание преобразованных параметров
Знак плюс (+) Всегда печатать символ знака (+ или-)
Нуль (0) Замещение нулями вместо пробелов
Символ преобразования может быть следующим:
Таблица 1.2.7. Символы преобразования команды fprint
Десятичное представление чисел (со знаком)
Экспоненциальное представление чисел (как в 3.1415е+00)
С фиксированной точкой
Компактный вид, без лишних нулей
Десятичное представление чисел (со знаком)
Десятичное представление чисел (без знака)
Шестнадцатеричное представление (с использованием символов нижнего регистра a-f)
Шестнадцатеричное представление (символы верхнего регистра A-F)
Пример 9. Открытие файла dat.txt для записи и запись в него данных из массива А. Данные из массива А читаются по столбцам, а запись ведется числами из 6 цифр с фиксированной запятой в 5 столбцов с горизонтальной табуляцией.
fprintf(fid, ‘%6.4f % б.4f % 6.4f % 6.4f % б.4f ‘,A);
Если команда fprintf используется без идентификатора файла (вместо него -цифра 1), то вывод идет на дисплей.
Пример 10. Следующая команда
В = [8.8 7.7; 8800 7700]
fprintf(1,’Х is %6.2f meters or %8.3f mm ‘, 9.9, 9900, В)
выводит на дисплей строки:
X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm
fscanf
A = fscanf( fileID , formatSpec ) считывает данные из открытого текстового файла в вектор-столбец A и интерпретирует значения в файле согласно формату, заданному formatSpec . fscanf функция повторно применяет формат в целом файле и располагает указатель файла в конце маркера. Если fscanf не может совпадать с formatSpec к данным это читает только фрагмент, который совпадает и прекращает обрабатывать.
Текстовый файл обозначается идентификатором файла, fileID Использование fopen чтобы открыть файл, задайте кодировку символов и получите fileID значение. Когда вы закончили читать, закрываете файл путем вызова fclose(fileID) .
A = fscanf( fileID , formatSpec , sizeA ) считывает данные о файле в массив, A , с размерностями, sizeA , и положения указатель файла после последнего чтения значения. fscanf заполняет A в порядке следования столбцов. sizeA должен быть положительное целое число или иметь форму [m n] , где m и n положительные целые числа.
[ A , count ] = fscanf( ___ ) дополнительно возвращает количество полей это fscanf чтения в A . Для числовых данных это — количество чтения значений. Можно использовать этот синтаксис с любым из входных параметров предыдущих синтаксисов.
Примеры
Чтение содержимого файла в вектор — столбец
Создайте демонстрационный текстовый файл, который содержит числа с плавающей запятой.
x = 100*rand(8,1); fileID = fopen('nums1.txt','w'); fprintf(fileID,'%4.4f\n',x); fclose(fileID);
Просмотрите содержимое файла.
type nums1.txt
81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882
Откройте файл для чтения и получите идентификатор файла, fileID .
fileID = fopen('nums1.txt','r');
Задайте формат данных, чтобы читать. Используйте ‘%f’ задавать числа с плавающей запятой.
formatSpec = '%f';
Считайте данные о файле, заполнив выходной массив, A , в порядке следования столбцов. fscanf повторно применяет формат, formatSpec , в файле.
A = fscanf(fileID,formatSpec)
A = 8×1 81.4724 90.5792 12.6987 91.3376 63.2359 9.7540 27.8498 54.6882
A вектор-столбец, содержащий данные из файла.
fclose(fileID);
Чтение содержимого файла в массив
Создайте демонстрационный текстовый файл, который содержит целые числа и числа с плавающей запятой.
x = 1:1:5; y = [x;rand(1,5)]; fileID = fopen('nums2.txt','w'); fprintf(fileID,'%d %4.4f\n',y); fclose(fileID);
Просмотрите содержимое файла.
type nums2.txt
1 0.8147 2 0.9058 3 0.1270 4 0.9134 5 0.6324
Откройте файл для чтения и получите идентификатор файла, fileID .
fileID = fopen('nums2.txt','r');
Задайте формат данных, чтобы читать и форма выходного массива.
formatSpec = '%d %f'; sizeA = [2 Inf];
Считайте данные о файле, заполнив выходной массив, A , в порядке следования столбцов. fscanf снова использует формат, formatSpec , в файле.
A = fscanf(fileID,formatSpec,sizeA)
A = 2×5 1.0000 2.0000 3.0000 4.0000 5.0000 0.8147 0.9058 0.1270 0.9134 0.6324
fclose(fileID);
Транспонируйте массив так, чтобы A совпадает с ориентацией данных в файле.
A = A'
A = 5×2 1.0000 0.8147 2.0000 0.9058 3.0000 0.1270 4.0000 0.9134 5.0000 0.6324
Пропуск определенных символов в файле
Пропустите определенные символы в файле примера и возвратите только числовые данные.
Создайте демонстрационный текстовый файл, содержащий температурные значения.
str = '78°C 72°C 64°C 66°C 49°C'; fileID = fopen('temperature.dat','w'); fprintf(fileID,'%s',str); fclose(fileID);
Считайте числа в файле, пропустив текст, °C. Также возвратите количество значений что fscanf чтения. Расширенный код ASCII 176 представляет знак степени.
fileID = fopen('temperature.dat','r'); degrees = char(176); [A,count] = fscanf(fileID, ['%d' degrees 'C']) fclose(fileID);
A = 78 72 64 66 49 count = 5
A вектор, содержащий числовые значения в файле. count указывает на тот fscanf считайте пять значений.
Входные параметры
fileID — Идентификатор файла
целое число
Идентификатор файла открытого текстового файла в виде целого числа. Прежде, чем считать файл с fscanf , необходимо использовать fopen открыть файл и получить fileID .
Типы данных: double
formatSpec — Формат полей данных
вектор символов | строковый скаляр
Формат полей данных в файле в виде вектора символов или строкового скаляра одного или нескольких спецификаторов преобразования. Когда fscanf читает файл, он пытается совпадать с данными к формату, заданному formatSpec .
Numeric Fields
Эта таблица приводит доступные спецификаторы преобразования для числовых входных параметров. fscanf преобразует значения в их десятичное число (базируйтесь 10), представление.
Целое число, со знаком
Значения в файле определяют основу:
- Значение по умолчанию основное 10.
- Если начальными цифрами является 0x или 0X , затем значения являются шестнадцатеричными (базируйтесь 16).
- Если начальной цифрой является 0 , затем значения являются восьмеричными (базируйтесь 8).
64-битные значения, основа 10, 8, или 16
Целое число, без знака
Базируйтесь 8 (восьмеричный)
Базируйтесь 16 (шестнадцатеричный)
64-битные значения, основа 10, 8, или 16
Число с плавающей запятой
Поля с плавающей точкой могут содержать любое из следующих (не чувствительный к регистру): Inf Inf NaN , или -NaN .
Character Fields
Эта таблица приводит доступные спецификаторы преобразования для символьных входов.
Вектор символов или строковый скаляр
Считайте все символы, исключая пробелы.
Считайте любой отдельный символ, включая пробел.
Чтобы считать несколько символов за один раз, задайте ширину поля.
Сопоставление с образцом
Символы только для чтения в скобках до первого символа несоответствия или пробела.
Пример: %[mus] чтения ‘summer ‘ как ‘summ’ .
Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем fscanf преобразует каждый символ в его числовой эквивалент. Это преобразование происходит, даже когда формат явным образом пропускает все числовые значения (например, formatSpec ‘%*d %s’ ).
Optional Operators
- Поля и символы, чтобы проигнорировать fscanf чтения все числовые значения и символы в вашем файле в последовательности, если вы не говорите ему игнорировать конкретное поле или фрагмент поля. К полям игнорируемых данных вставьте звездочку ( * ) после знака процента ( % ). Например, чтобы пропустить целые числа, задайте %*d .
- Ширина поля Чтобы задать максимальное количество цифр или текстовых символов, чтобы читать за один раз, вставьте номер после символа процента. Например, %10c чтения до 10 символов за один раз, включая пробел. %4f чтения до 4 цифр за один раз, включая десятичную точку.
- Буквенный текст, чтобы проигнорировать fscanf игнорирует заданный текст, добавленный к formatSpec спецификатор преобразования. Пример: Level%u чтения ‘Level1’ как 1 . Пример: %uStep чтения ‘2Step’ как 2 .
sizeA — Размерности выходного массива
Inf (значение по умолчанию) | целое число | двухэлементный вектор-строка
Размерности выходного массива, A В виде Inf , целое число или двухэлементный вектор-строка.
| Форма sizeA Входной параметр | Описание |
|---|---|
| Inf | Читайте в конец файла. Для числовых данных, выхода, A , вектор-столбец. Для текстовых данных, A вектор символов. |
| n | Читайте в большей части n числовые значения или символьные поля. Для числовых данных, выхода, A , вектор-столбец. Для текстовых данных, A , вектор символов. |
| m, n ] | Читайте в большей части m N числовые значения или символьные поля. n может быть Inf , но m не может. Выход, A , m — n , заполненный порядок следования столбцов. |
Выходные аргументы
A — Данные о файле
вектор-столбец | матрица | вектор символов | символьный массив
Данные о файле, возвращенные как вектор-столбец, матрица, вектор символов или символьный массив. Класс и размер A зависьте от formatSpec входной параметр:
- Если formatSpec содержит только числовые спецификаторы, затем A isnumeric. Если вы задаете sizeA аргумент, затем A матрица заданного размера. В противном случае, A вектор-столбец. Если вход содержит меньше, чем sizeA значения, затем fscanf клавиатуры A с нулями.
- Если formatSpec содержит только 64-битные спецификаторы целого числа со знаком, затем A имеет класс int64 .
- Если formatSpec содержит только 64-битные спецификаторы беззнаковых целых чисел, затем A имеет класс uint64 .
- В противном случае, A имеет класс double .
count — Количество чтения символов
скаляр
Количество чтения символов, возвращенного как скалярное значение.
Советы
- Спецификаторы формата для чтения функционируют sscanf и fscanf отличайтесь от форматов для функций записи sprintf и fprintf . Функции чтения не поддерживают поле точности. Поле width задает минимум для записи, но максимум для чтения.
Алгоритмы
MATLAB читает символы с помощью схемы кодирования, сопоставленной с файлом. Вы задаете кодирование, когда вы открываете файл с помощью fopen функция.
Расширенные возможности
Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.
Указания и ограничения по применению:
- Для генерации кода MEX, обработок генератора кода fscanf как внешняя функция. Смотрите Использование MATLAB Engine, чтобы Выполнить Вызов функции в Сгенерированном коде (MATLAB Coder) .
- Входной параметр formatSpec должна быть константа.
- %s и %[. ] спецификаторы преобразования не поддерживаются.
- Если вы генерируете MEX, динамическое выделение памяти должно быть включено.
- При генерации автономного кода, если вы выключаете динамическое выделение памяти, необходимо предоставить входному параметру sizeA и это должна быть константа.
- В определенных случаях поведение сгенерированного кода может отличаться от MATLAB. В таких случаях, поведении соответствий сгенерированного кода тот из fscanf на языке C. Это некоторые примеры:
- В сгенерированном коде, если fscanf читает пустой байт, возвращенные значения могут быть усеченными.
- Если вы читаете целочисленное значение x в целочисленный формат, для который intmax меньше, чем x , MATLAB выход насыщает в intmax . В сгенерированном коде эта ситуация вызывает переполнение.
- В определенных случаях, после fscanf чтения из файла, местоположение указателя файла может отличаться в MATLAB и сгенерированном коде. Например, предположите что файл myFile.txt содержит вектор символов ‘1+2I’ . Вы выполняете эти команды:
fid = fopen('myFile.txt','r'); tmp = fscanf(fid, '%f')
tmp = 1 2
Использование ftell определить текущее местоположение указателя положения в файле myFile.txt .
ftell(fid)
ans = 3
Смотрите также
Темы
Представлено до R2006a
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.