(Не рекомендуемый) отформатированные данные Рида от строки
strread не рекомендуется. Используйте textscan вместо этого.
A = strread('str')
[A, B, ...] = strread('str')
[A, B, ...] = strread('str', 'format')
[A, B, ...] = strread('str', 'format',
N)
[A, B, ...] = strread('str', 'format',
N, param, value, ...)
A = strread('str') считывает числовые данные из вектора вводимого символа str в 1 N векторным A, где N равняется количеству разделенных от пробела чисел в str. Используйте эту форму только с векторами символов, содержащими числовые данные. Смотрите Пример 1 ниже.
[A, B, ...] = strread('str') считывает числовые данные из входа str вектора символов в скалярные выходные переменные A, B, и так далее. Количество выходных переменных должно равняться количеству разделенных от пробела чисел в str. Используйте эту форму только с векторами символов, содержащими числовые данные. Смотрите Пример 2 ниже.
[A, B, ...] = strread('str', 'format') считывает данные из str в переменные A, B, и так далее с помощью заданного format. Количество выходных переменных A, B, и т.д. должно быть равно количеству спецификаторов формата (например, %s или %d) в аргументе format. Можно считать все данные в str к одной выходной переменной, пока вы используете только один спецификатор формата в команде. Смотрите Пример 4 и Пример 5 ниже.
Форматы таблицы для strread перечисляют спецификаторы допустимого формата. Больше информации об использовании форматов доступно под Форматами в разделе Tips ниже.
[A, B, ...] = strread('str', 'format',
N) считывает данные из str, снова использующего вектор символов format времена N, где N является целым числом, больше, чем нуль. Если N-1, strread читает целый вектор символов. Когда str содержит только числовые данные, можно установить format на пустой символьный вектор (''). Смотрите Пример 3 ниже.
[A, B, ...] = strread('str', 'format',
N, param, value, ...) настраивает strread с помощью param/value пары, как перечисленные в таблице Параметры и Значения для strread ниже. Когда str содержит только числовые данные, можно установить format на пустой символьный вектор (''). Аргумент N является дополнительным и может быть не использован полностью. Смотрите Пример 7 ниже.
Форматы для strread
|
Формат |
Действие |
Вывод |
|---|---|---|
|
Литералы (обычные символы) |
Проигнорируйте соответствующие символы. Например, в векторе символов, которому следовал |
'none' |
%d |
Считайте значение целого числа со знаком. |
Двойной массив |
%u |
Считайте целочисленное значение. |
Двойной массив |
%f |
Считайте значение с плавающей точкой. |
Двойной массив |
%s |
Читайте пробел разделил вектор символов. |
Массив ячеек из символьных векторов |
%q |
Считайте двойной заключенный в кавычки вектор символов, игнорируя кавычки. |
Массив ячеек из символьных векторов |
%c |
Считайте символы, включая пробел. |
Массив символов |
%[...] |
Считайте самый длинный вектор символов, содержащий символы, заданные в скобках. |
Массив ячеек из символьных векторов |
%[^...] |
Считайте самый длинный непустой вектор символов, содержащий символы, которые не заданы в скобках. |
Массив ячеек из символьных векторов |
%*... |
Проигнорируйте символы после |
Никакой вывод |
%w... |
Считайте ширину поля, заданную |
Параметры и Значения для strread
|
параметрический усилитель |
значение |
Действие | |
|---|---|---|---|
whitespace |
Любой из списка ниже: |
Вектор обработок символов, | |
\b\n\r\t\\%%'' | Клавиша Backspace Новая строка Возврат каретки Горизонтальная вкладка Наклонная черта влево Знак процента Одна кавычка | ||
delimiter |
Символ-разделитель |
Задает символ-разделитель. Значением по умолчанию являются один или несколько пробельных символов. | |
expchars |
ExponentCharacters |
Значением по умолчанию является | |
bufsize |
Положительное целое число |
Задает максимальную длину вектора символов, в байтах. Значением по умолчанию является | |
commentstyle | matlab |
Игнорирует символы после | |
commentstyle | shell |
Игнорирует символы после | |
commentstyle | c |
Игнорирует символы между | |
commentstyle | c++ |
Игнорирует символы после | |
emptyvalue | Значение, чтобы возвратиться для пустых числовых полей в разграниченных файлах | Значением по умолчанию является 0. | |
Считайте числовые данные в вектор 1 на 5:
a = strread('0.41 8.24 3.57 6.24 9.27')
a =
0.4100 8.2400 3.5700 6.2400 9.2700Считайте числовые данные в отдельные скалярные переменные:
[a b c d e] = strread('0.41 8.24 3.57 6.24 9.27')
a =
0.4100
b =
8.2400
c =
3.5700
d =
6.2400
e =
9.2700Считайте единственные первые три числа в векторе символов, также форматируя как плавающая точка:
a = strread('0.41 8.24 3.57 6.24 9.27', '%4.2f', 3)
a =
0.4100
8.2400
3.5700Обрежьте данные до одной десятичной цифры путем определения формата %3.1f. Второй спецификатор, %*1d, говорит strread не читать в остающейся десятичной цифре:
a = strread('0.41 8.24 3.57 6.24 9.27', '%3.1f %*1d')
a =
0.4000
8.2000
3.5000
6.2000
9.2000Считайте шесть чисел в две переменные, снова использовав спецификаторы формата:
[a b] = strread('0.41 8.24 3.57 6.24 9.27 3.29', '%f %f')
a =
0.4100
3.5700
9.2700
b =
8.2400
6.2400
3.2900Считайте вектор символов и числовые данные к двум выходным переменным. Проигнорируйте запятые в векторе вводимого символа:
str = 'Section 4, Page 7, Line 26';
[name value] = strread(str, '%s %d,')
name =
'Section'
'Page'
'Line'
value =
4
7
26Считайте вектор символов, используемый в последнем примере, но на этот раз разграничив с запятыми вместо пробелов:
str = 'Section 4, Page 7, Line 26';
[a b c] = strread(str, '%s %s %s', 'delimiter', ',')
a =
'Section 4'
b =
'Page 7'
c =
'Line 26'Считайте выбранные фрагменты вектора вводимого символа:
str = '<table border=5 width="100%" cellspacing=0>';
[border width space] = strread(str, ...
'%*s%*s %c %*s "%4s" %*s %c', 'delimiter', '= ')
border =
5
width =
'100%'
space =
0Считайте вектор символов в два вектора, ограничив значения Answer T и F. Также обратите внимание, что два разделителя (запятая и пробел) используются здесь:
str = 'Answer_1: T, Answer_2: F, Answer_3: F';
[a b] = strread(str, '%s %[TF]', 'delimiter', ', ')
a =
'Answer_1:'
'Answer_2:'
'Answer_3:'
b =
'T'
'F'
'F'Если вы отключаете вектор вводимого символа с символом новой строки (\n), strread возвращает массивы равного размера путем дополнения массивов меньшего размера с символом emptyvalue:
[A,B,C] = strread(sprintf('5,7,1,9\n'),'%d%d%d', ...
'delimiter', ',', 'emptyvalue',NaN)
A =
5
9
B =
7
NaN
C =
1
NaNЕсли вы удаляете \n из вектора вводимого символа этого примера, массив, которым A продолжает быть 2 1 массив, но B и C теперь 1 на 1.
Если ваши данные используют символ кроме пробела как разделитель, необходимо использовать параметр strread 'delimiter', чтобы задать разделитель. Например, если бы вектор символов, str использовал точку с запятой в качестве разделителя, вы использовали бы эту команду:
[names, types, x, y, answer] = strread(str,'%s %s %f ...
%d %s','delimiter',';')Вектор символов format определяет номер и типы возвращаемых аргументов. Количество возвращаемых аргументов должно совпадать с количеством спецификаторов преобразования в векторе символов format.
Функция strread продолжает читать str, пока целый вектор символов не читается. Если существует меньше спецификаторов формата, чем существуют сущности в str, strread повторно применяет спецификаторы формата, запускающиеся вначале. Смотрите Пример 5 ниже.
Вектор символов format поддерживает подмножество спецификаторов преобразования и соглашения языка C стандартная программа fscanf. Пробельные символы в векторе символов format проигнорированы.
Если вы хотите сохранить продвижение и конечные пробелы в векторе символов, используйте параметр whitespace как показано здесь:
str = ' An example of preserving spaces ';
strread(str, '%s', 'whitespace', '')
ans =
' An example of preserving spaces '