5.4.2 Числовые данные и строки
Помимо функций конкатенации строк (см. Конкатенация строк), которые преобразуют числовые данные в соответствующие символы UTF-8, существуют несколько функций для форматирования числовых данных в виде строк. mat2str и num2str преобразуют вещественные или комплексные матрицы, а int2str преобразует целочисленные матрицы. int2str извлекает вещественную часть комплексных значений и округляет дробные значения до целых. Более гибкий способ форматирования числовых данных в виде строк — функция sprintf (см. Форматированный вывод, sprintf).
- : s = mat2str (x, n) ¶
- : s = mat2str (x, n, "class") ¶
-
Форматирование вещественных, комплексных и логических матриц в виде строк.
Полученная строка может быть использована для восстановления исходной матрицы с помощью функции
eval.Точность значений задается параметром n. Если n — скаляр, то вещественная и мнимая части матрицы выводятся с одинаковой точностью. В противном случае
n(1)определяет точность вещественной части, аn(2)— точность мнимой части. По умолчанию n равен 15.Если задан аргумент
"class", то в строку включается класс x таким образом, чтоevalприведет к построению матрицы того же класса.mat2str ([ -1/3 + i/7; 1/3 - i/7 ], [4 2]) ⇒ "[-0.3333+0.14i;0.3333-0.14i]" mat2str ([ -1/3 +i/7; 1/3 -i/7 ], [4 2]) ⇒ "[-0.3333+0i 0+0.14i;0.3333+0i -0-0.14i]" mat2str (int16 ([1 -1]), "class") ⇒ "int16([1 -1])" mat2str (logical (eye (2))) ⇒ "[true false;false true]" isequal (x, eval (mat2str (x))) ⇒ 1
- : str = num2str (x) ¶
- : str = num2str (x, precision) ¶
- : str = num2str (x, format) ¶
-
Преобразование числа (или массива) в строку (или массив символов).
Необязательный второй аргумент может задавать количество значащих цифр (precision), используемых в выводе, или строку шаблона формата (format) как в
sprintf(см. Форматированный вывод).num2strтакже может обрабатывать комплексные числа.Примеры:
num2str (123.456) ⇒ 123.456 num2str (123.456, 4) ⇒ 123.5 s = num2str ([1, 1.34; 3, 3.56], "%5.1f") ⇒ s = 1.0 1.3 3.0 3.6 whos s ⇒ Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== s 2x8 16 char Total is 16 elements using 16 bytes num2str (1.234 + 27.3i) ⇒ 1.234+27.3iФункция
num2strне очень гибкая. Для лучшего контроля над результатами используйтеsprintf(см. Форматированный вывод).Примечания по программированию:
Для совместимости с MATLAB, ведущие пробелы удаляются перед возвращением строки.
Целые числа, большие чем
flintmax, могут отображаться некорректно.Для комплексных x, строка формата может содержать только одно спецификацию преобразования вывода и ничего более. В противном случае результаты будут непредсказуемыми.
Любой необязательный format, указанный программистом, используется без изменений. Это в отличие от MATLAB, который изменяет format на основе внутренних эвристик.
- : str = int2str (n) ¶
-
Преобразование целого числа (или массива целых чисел) в строку (или массив символов).
int2str (123) ⇒ 123 s = int2str ([1, 2, 3; 4, 5, 6]) ⇒ s = 1 2 3 4 5 6 whos s ⇒ Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== s 2x7 14 char Total is 14 elements using 14 bytesЭта функция не очень гибкая. Для лучшего контроля над результатами используйте
sprintf(см. Форматированный вывод).Примечания по программированию:
Нецелые числа округляются до целых перед отображением. Отображается только вещественная часть комплексных чисел.
- : d = str2double (str) ¶
-
Преобразование строки в вещественное или комплексное число.
Строка должна быть в одном из следующих форматов, где a и b — вещественные числа, а комплексная единица —
'i'или'j':- a + bi
- a + b*i
- a + i*b
- bi + a
- b*i + a
- i*b + a
Если присутствуют, a и/или b имеют вид [+-]d[,.]d[[eE][+-]d], где скобки указывают необязательные аргументы, а
'd'обозначает ноль или более цифр. Также принимаются специальные входные значенияInf,NaN, иNA.str может быть строкой символов, матрицей символов или массивом ячеек. Для матриц символов преобразование повторяется для каждой строки, и возвращается массив или комплексный массив. Пустые строки в s удаляются и не возвращаются в числовом массиве. Для массивов ячеек каждый элемент строки символов обрабатывается, и возвращается массив или комплексный массив тех же размеров, что и str.
Для необратимых скалярных или строковых входных данных
str2doubleвозвращает NaN. Аналогично, для входных данных матрицы символовstr2doubleвозвращает NaN для любой строки s, которая не могла быть преобразована. Для массива ячеекstr2doubleвозвращает NaN для любого элемента s, для которого преобразование не удалось. Обратите внимание, что числовые элементы в смешанном массиве ячеек с строками/числами не являются строками, и преобразование не пройдет для этих элементов, вернув NaN.Примечание по программированию:
str2doubleможет заменитьstr2num, более эффективно и избегает риска безопасности при использованииevalс неизвестными данными.См. также: str2num.
- : x = str2num (s) ¶
- : [x, state] = str2num (s) ¶
-
Преобразование строки (или массива символов) s в число (или массив).
Примеры:
str2num ("3.141596") ⇒ 3.141596 str2num (["1, 2, 3"; "4, 5, 6"]) ⇒ 1 2 3 4 5 6Необязательный второй вывод, state, имеет логическое значение true, когда преобразование успешно. Если преобразование не удалось, числовой вывод x пуст, а state — false.
Внимание: Так как
str2numиспользует функциюevalдля преобразования,str2numвыполнит любой код, содержащийся в строке s. Используйтеstr2doubleдля более безопасного и быстрого преобразования.Для массива ячеек строк используйте
str2double.См. также: str2double, eval.
- : d = bin2dec (str) ¶
-
Возвращает десятичное число, соответствующее двоичному числу, представленному строкой str.
Например:
bin2dec ("1110") ⇒ 14Пробелы игнорируются во время преобразования и могут использоваться для повышения читаемости двоичного числа.
bin2dec ("1000 0001") ⇒ 129Если str — матрица строк, возвращается столбец с одним преобразованным числом на строку str; некорректные строки оцениваются как NaN.
Если str — массив ячеек строк, возвращается столбец с одним преобразованным числом на каждый элемент ячейки в str.
- : bstr = dec2bin (d) ¶
- : bstr = dec2bin (d, len) ¶
-
Возвращает строку из единиц и нулей, представляющую преобразование целого числа d в двоичное число.
Если d — матрица или массив ячеек, возвращается матрица строк с одной строкой для каждого элемента в d, дополненная ведущими нулями до ширины наибольшего значения.
Необязательный второй аргумент len задает минимальное количество цифр в результате.
Для отрицательных элементов d возвращается двоичное значение дополнительного кода. Результат дополняется ведущими единицами до 8, 16, 32 или 64 бит в зависимости от величины входных данных. Положительные входные элементы дополняются ведущими нулями до той же ширины. Если второй аргумент len превышает вычисленную ширину, результат дополняется ведущими нулями для совместимости с MATLAB.
Примеры:
dec2bin (14) ⇒ "1110" dec2bin (-14) ⇒ "11110010"Известная несовместимость с MATLAB: MATLAB’s
dec2binпозволяет использовать нецелые значения для d начиная с релиза 2022b, но не согласуется с усечением по сравнению с округлением, а также не согласуется со своей собственной функциейdec2hex. Для самосогласованности Octave выдаёт ошибку для нецелых входных данных. Пользователи, которым требуется совместимый код для нецелых входных данных, должны использоватьfixилиroundсоответственно.
- : hstr = dec2hex (d) ¶
- : hstr = dec2hex (d, len) ¶
-
Возвращает строку, представляющую результат преобразования целого числа d в шестнадцатеричную (основание 16) систему счисления.
Если d отрицательно, возвращается шестнадцатеричное значение, соответствующее двоичному представлению с дополнением до двух. Если d является матрицей или массивом ячеек, возвращается матрица строк, содержащая по одной строке для каждого элемента в d, дополненная ведущими нулями до ширины самого большого значения.
Необязательный второй аргумент len определяет минимальное количество цифр в результате.
Примеры:
dec2hex (2748) ⇒ "ABC" dec2hex (-2) ⇒ "FE"
- : d = hex2dec (str) ¶
-
Возвращает целое число, соответствующее шестнадцатеричному числу, представленному строкой str.
Например:
hex2dec ("12B") ⇒ 299 hex2dec ("12b") ⇒ 299Если str является матрицей строк, возвращается столбец с одним преобразованным числом на строку str; некорректные строки приводят к NaN.
Если str является массивом ячеек строк, возвращается столбец с одним преобразованным числом на каждый элемент ячейки в str.
- : str = dec2base (d, base) ¶
- : str = dec2base (d, base, len) ¶
-
Возвращает строку символов в системе счисления с основанием base, соответствующую неотрицательному целому числу d.
dec2base (123, 3) ⇒ "11120"
Если d является матрицей или массивом ячеек, возвращается матрица строк с одной строкой на каждый элемент в d, дополненная ведущими нулями до ширины самого большого значения.
Если base является строкой, то символы base используются как символы цифр для d. Пробелы (пробелы, табуляции, новые строки и т. д.) не могут использоваться в качестве символа.
dec2base (123, "aei") ⇒ "eeeia"
Необязательный третий аргумент len определяет минимальное количество цифр в результате.
- : d = base2dec (str, base) ¶
-
Преобразует str из строки цифр в системе счисления с основанием base в целое десятичное число (основание 10).
base2dec ("11120", 3) ⇒ 123Если str является матрицей строк, возвращается столбец с одним значением на строку str. Если строка содержит недопустимые символы, соответствующее значение будет NaN.
Если str является массивом ячеек строк, возвращается столбец с одним значением на каждый элемент ячейки в str.
Если base является строкой, то символы base используются как символы цифр для str. Пробел (’ ’) не может использоваться в качестве символа.
base2dec ("yyyzx", "xyz") ⇒ 123
- : s = num2hex (n) ¶
- : s = num2hex (n, "cell") ¶
-
Преобразует числовой массив в массив шестнадцатеричных строк.
Например:
num2hex ([-1, 1, e, Inf]) ⇒ "bff0000000000000 3ff0000000000000 4005bf0a8b145769 7ff0000000000000"Если аргумент n является числом одинарной точности или вектором, возвращаемая строка имеет длину 8. Например:
num2hex (single ([-1, 1, e, Inf])) ⇒ "bf800000 3f800000 402df854 7f800000"С необязательным вторым аргументом
"cell", возвращается массив ячеек строк вместо символьного массива.
- : n = hex2num (s) ¶
- : n = hex2num (s, class) ¶
-
Преобразование шестнадцатеричного символьного массива или массива ячеек строк в массив чисел.
По умолчанию входной массив интерпретируется как шестнадцатеричное число, представляющее значение двойной точности. Если указано меньше 16 символов, строки дополняются справа символами
'0'.Для матрицы строк,
hex2numкаждая строка обрабатывается как отдельное число.hex2num (["4005bf0a8b145769"; "4024000000000000"]) ⇒ [2.7183; 10.000]
Необязательный второй аргумент class может быть использован для интерпретации входного массива как значения другого типа. Возможные значения:
Вариант Символы "int8"2 "uint8"2 "int16"4 "uint16"4 "int32"8 "uint32"8 "int64"16 "uint64"16 "char"2 "single"8 "double"16 Например:
hex2num (["402df854"; "41200000"], "single") ⇒ [2.7183; 10.000]
- : [a, …] = strread (str) ¶
- : [a, …] = strread (str, format) ¶
- : [a, …] = strread (str, format, format_repeat) ¶
- : [a, …] = strread (str, format, prop1, value1, …) ¶
- : [a, …] = strread (str, format, format_repeat, prop1, value1, …) ¶
-
Эта функция устарела. Используйте
textscanвместо неё.Считывает данные из строки.
Строка str разбивается на слова, которые многократно сопоставляются со спецификаторами в format. Первое слово сопоставляется с первым спецификатором, второе — со вторым и так далее. Если слов больше, чем спецификаторов, процесс повторяется до тех пор, пока все слова не будут обработаны.
Строка format описывает, как следует анализировать слова в str. Она может содержать любое сочетание следующих спецификаторов:
%s-
Слово анализируется как строка.
%f%n-
Слово анализируется как число и преобразуется в double.
%d%u-
Слово анализируется как число и преобразуется в int32.
%*%*f%*s-
Слово пропускается.
Для %s и %d, %f, %n, %u и связанных %*s … спецификаторов можно указать необязательную ширину, как %Ns, и т. д., где N — целое число > 1. Для %f разрешены спецификаторы формата, такие как %N.Mf.
literalsКроме того, формат может содержать строковые литералы; они будут пропущены во время чтения.
Обработанные слова, соответствующие первому спецификатору, возвращаются в первом выходном аргументе, и так же для остальных спецификаторов.
По умолчанию format — "%f", что означает, что числа считываются из str. Это сработает, если str содержит только числовые поля.
Например, строка
str = "\ Bunny Bugs 5.5\n\ Duck Daffy -7.5e-5\n\ Penguin Tux 6"
может быть прочитана с помощью
[a, b, c] = strread (str, "%s %s %f");
Необязательный числовой аргумент format_repeat может использоваться для ограничения количества считываемых элементов:
- -1
-
(по умолчанию) считывает всю строку до конца.
- N
Считывает N раз nargout элементов. 0 (ноль) — допустимое значение для format_repeat.
Поведение
strreadможет быть изменено с помощью пар свойство-значение. Распознаются следующие свойства:"commentstyle"-
Части str считаются комментариями и будут пропущены. value — стиль комментария и может быть любым из следующих.
-
"shell"Всё от#символов до ближайшей конца строки пропускается. -
"c"Всё между/*и*/пропускается. -
"c++"Всё от//символов до ближайшей конца строки пропускается. -
"matlab"Всё от%символов до ближайшей конца строки пропускается. - пользовательские. Два варианта: (1) Одна строка или 1x1 строковый массив ячеек: Пропустить всё справа от неё; (2) 2x1 ячейковый массив строк: Пропустить всё между левой и правой строками.
-
"delimiter"-
Любой символ в value будет использоваться для разделения str на слова (значение по умолчанию — любой пробел). Обратите внимание, что пробелы неявно добавляются в набор символов-разделителей, если не указан спецификатор преобразования формата
"%s"; см. параметр"whitespace"ниже. Набор символов-разделителей не может быть пустым; в случае необходимости Octave использует пробел в качестве разделителя. "emptyvalue"-
Значение для возвращаемых пустых числовых значений в данных без пробелов. Значение по умолчанию — NaN. Когда тип данных не поддерживает NaN (например, int32), значение по умолчанию — ноль.
"multipledelimsasone"-
Обрабатывать серию последовательных разделителей без пробелов между ними как один разделитель. Последовательные серии разделителей не обязательно должны быть вертикальными
"aligned". "treatasempty"-
Обрабатывать отдельные вхождения (окруженные разделителями или пробелами) строки(строк) в value как пропущенные значения.
"returnonerror"-
Если value истинно (1, по умолчанию), игнорировать ошибки чтения и возвращаться нормально. Если ложно (0), возвращать ошибку.
"whitespace"-
Любой символ в value будет интерпретироваться как пробел и усекаться; строка, определяющая пробелы, должна быть заключена в двойные кавычки для правильной обработки специальных символов, таких как
"\t". В каждом поле данных несколько последовательных пробелов сводятся к одному пробелу, а ведущие и хвостовые пробелы удаляются. Значение по умолчанию для пробелов —" \b\r\n\t"(обратите внимание на пробел). Пробелы всегда добавляются в набор символов-разделителей, если не указан хотя бы один спецификатор преобразования формата"%s"; в этом случае только пробелы, явно указанные в"delimiter", сохраняются как разделитель и удаляются из набора символов-пробелов. Если символы пробела должны сохраняться как есть (например, в строках), укажите пустое значение (т. е."") для"whitespace"; очевидно, пробелы тогда не могут быть разделителями.
Когда количество слов в str не соответствует точному кратному количеству спецификаторов преобразования формата, поведение strread зависит от последнего символа str:
- последний символ =
"\n" -
Столбцы данных заполняются пустыми полями или NaN, чтобы все столбцы имели одинаковую длину
- последний символ не
"\n" -
Столбцы данных не заполняются; strread возвращает столбцы разной длины
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v8.1.0/Numerical-Data-and-Strings.html