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 может быть символьной строкой, символьной матрицей или массивом ячеек. Для символьных массивов преобразование повторяется для каждой строки, и возвращается массив типа double или комплексный массив. Пустые строки в s удаляются и не возвращаются в числовом массиве. Для массивов ячеек обрабатывается каждый элемент-символьная строка, а возвращается массив типа double или комплексный массив тех же размеров, что и 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 бит в зависимости от величины входного значения. Положительные входные значения дополняются слева нулями до той же ширины.
Примеры:
dec2bin (14) ⇒ "1110" dec2bin (-14) ⇒ "11110010"Совет по программированию:
dec2binотбрасывает дробную часть входного значения. Если требуется преобразовать и дробную часть, вызовитеdec2baseс ненулевым количеством десятичных разрядов. Для обеспечения предсказуемого округления дробных входных значений также можно использоватьfixилиround.
-
:
hstr =dec2hex(d) -
:
hstr =dec2hex(d, len) -
Возвращает строку, представляющую результат преобразования целого числа d в шестнадцатеричное число (с основанием 16).
Если d отрицательно, возвращается шестнадцатеричное дополнение числа d.
Если d — матрица или массив ячеек, возвращается строковая матрица с одной строкой для каждого элемента d, дополненная слева нулями до ширины наибольшего значения.
Необязательный второй аргумент len задаёт минимальное количество цифр в результате.
Примеры:
dec2hex (2748) ⇒ "ABC" dec2hex (-2) ⇒ "FE"Совет по программированию:
dec2hexотбрасывает дробную часть входного значения. Если требуется преобразовать и дробную часть, вызовитеdec2baseс ненулевым количеством десятичных разрядов. Для обеспечения предсказуемого округления дробных входных значений также можно использоватьfixилиround.
-
:
d =hex2dec(str) -
Возвращает целое число, соответствующее шестнадцатеричному числу, представленному строкой str.
Например:
hex2dec ("12B") ⇒ 299 hex2dec ("12b") ⇒ 299Если str — строковая матрица, возвращается столбцовый вектор с одним преобразованным числом для каждой строки str; для недопустимых строк возвращается NaN.
Если str — массив ячеек со строками, возвращается столбцовый вектор с одним преобразованным числом для каждого элемента-ячейки в str.
-
:
str =dec2base(d, base) -
:
str =dec2base(d, base, len) -
:
str =dec2base(d, base, len, decimals) -
Возвращает строку символов в системе счисления с основанием base, соответствующую значению d.
dec2base (123, 3) ⇒ "11120"
Если d отрицательно, результат будет представлять d в дополнительном коде. Например, отрицательные двоичные числа представлены в дополнительном коде, аналогично и для других оснований.
Если d — матрица или массив ячеек, возвращается строковая матрица с одной строкой для каждого элемента d, дополненная слева нулями до ширины наибольшего значения.
Если base — строка, её символы используются в качестве цифр для представления d. Пробельные символы (пробелы, табуляции, символы новой строки и т. п.) нельзя использовать в качестве цифр.
dec2base (123, "aei") ⇒ "eeeia"
Необязательный третий аргумент len задаёт минимальное количество цифр в целой части результата. Если этот аргумент опущен,
dec2baseиспользует достаточно цифр для представления входного значения.Необязательный четвёртый аргумент decimals задаёт количество цифр для представления дробной части входного значения. Если этот аргумент опущен, ему присваивается ноль, и
dec2baseвозвращает целочисленный результат для обеспечения обратной совместимости.dec2base (100*pi, 16) ⇒ "13A" dec2base (100*pi, 16, 4) ⇒ "013A" dec2base (100*pi, 16, 4, 6) ⇒ "013A.28C59D" dec2base (-100*pi, 16) ⇒ "EC6" dec2base (-100*pi, 16, 4) ⇒ "FEC6" dec2base (-100*pi, 16, 4, 6) ⇒ "FEC5.D73A63"
Совет по программированию: при передаче отрицательных входных значений в
dec2baseрекомендуется явно указывать требуемую длину результата.
-
:
d =base2dec(str, base) -
Преобразует str из строки цифр в системе счисления с основанием base в десятичное целое число (с основанием 10).
base2dec ("11120", 3) ⇒ 123Если str — строковая матрица, возвращается столбцовый вектор с одним значением для каждой строки str. Если строка содержит недопустимые символы, соответствующее значение будет NaN.
Если str — массив ячеек со строками, возвращается столбцовый вектор с одним значением для каждого элемента-ячейки в str.
Если 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 элементов. Для format_repeat допустимо значение 0 (ноль).
Поведение
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 имеет значение true (1, по умолчанию), ошибки чтения игнорируются, и функция завершается обычным образом. Если значение false (0), возвращается ошибка.
"whitespace"-
Любой символ из value интерпретируется как пробельный и удаляется; строку, задающую пробельные символы, необходимо заключить в двойные кавычки, чтобы корректно обрабатывать специальные символы, например
"\t". В каждом поле данных несколько следующих подряд пробельных символов объединяются в один пробел, а начальные и конечные пробелы удаляются. По умолчанию для пробельных символов используется" \b\r\n\t"(обратите внимание на пробел). Пробельные символы всегда добавляются к набору разделителей, если не задан хотя бы один спецификатор преобразования формата"%s"; в этом случае в качестве разделителей остаются только пробельные символы, явно указанные в"delimiter", а остальные исключаются из набора пробельных символов. Чтобы сохранить пробельные символы без изменений (например, в строках), задайте для"whitespace"пустое значение (то есть""); разумеется, тогда пробельные символы нельзя использовать в качестве разделителей.
Если количество слов в str не кратно количеству спецификаторов преобразования формата, поведение strread зависит от последнего символа в str:
- последний символ =
"\n" -
Столбцы данных дополняются пустыми полями или NaN, чтобы длина всех столбцов была одинаковой.
- последний символ не равен
"\n" -
Столбцы данных не дополняются; strread возвращает столбцы разной длины.
© 1996–2026 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/v9.4.0/Numerical-Data-and-Strings.html