14.2.11 Форматированный ввод
Octave предоставляет функции scanf, fscanf и sscanf для чтения форматированного ввода. Каждая из этих функций имеет две формы. Одна позволяет извлекать из файла векторы данных, другая больше похожа на функции в стиле C.
-
:
[val, count, errmsg] =fscanf(fid, template, size) -
:
[v1, v2, …, count, errmsg] =fscanf(fid, template, "C") -
В первой форме функция читает данные из fid в соответствии с template и возвращает результат в матрице val.
Необязательный аргумент size задаёт объём считываемых данных и может принимать одно из следующих значений:
Inf-
Считать максимально возможное количество данных и вернуть вектор-столбец.
nr-
Считать до nr элементов и вернуть вектор-столбец.
[nr, Inf]-
Считать максимально возможное количество данных и вернуть матрицу с nr строками. Если количество считанных элементов не кратно nr, последняя колонка дополняется нулями.
[nr, nc]Считать до
nr * ncэлементов и вернуть матрицу с nr строками. Если количество считанных элементов не кратно nr, последняя колонка дополняется нулями.
Если аргумент size не указан, предполагается значение
Inf.Если в template указаны только преобразования символов, возвращается строка.
Количество успешно считанных элементов возвращается в count.
В случае ошибки в errmsg содержится зависящее от системы сообщение об ошибке.
Во второй форме функция читает данные из fid в соответствии с template; каждому спецификатору преобразования в template соответствует одно возвращаемое скалярное значение. Эта форма больше похожа на функции в стиле C и также совместима с предыдущими версиями Octave. Количество успешно выполненных преобразований возвращается в count
Полное описание синтаксиса строки шаблона см. в разделе «Форматированный ввод» руководства GNU Octave.
-
:
[val, count, errmsg] =scanf(template, size) -
:
[v1, v2, …, count, errmsg] =scanf(template, "C") -
Эта функция эквивалентна вызову
fscanfс fid =stdin.В настоящее время вызов
scanfв интерактивных программах не имеет практического смысла.
-
:
[val, count, errmsg, pos] =sscanf(string, template, size) -
:
[v1, v2, …, count, errmsg] =sscanf(string, template, "C") -
Эта функция похожа на
fscanf, за исключением того, что символы считываются из строки string, а не из потока.Достижение конца строки рассматривается как условие конца файла. Помимо значений, возвращаемых
fscanf, в pos возвращается индекс следующего символа для чтения.
Вызовы scanf внешне похожи на вызовы printf: в обоих случаях произвольные аргументы считываются в соответствии со строкой шаблона. Хотя синтаксис спецификаторов преобразования в шаблоне очень похож на синтаксис printf, шаблон интерпретируется с учётом ввода в свободном формате и простого сопоставления с образцом, а не форматирования полей фиксированной ширины. Например, большинство преобразований scanf пропускают любое количество «пробельных символов» (включая пробелы, табуляции и символы новой строки) во входном файле, а для числовых преобразований ввода не предусмотрена точность, как для соответствующих преобразований вывода. Обычно ожидается, что непробельные символы в шаблоне будут в точности совпадать с символами во входном потоке. Например, обратите внимание, что sscanf по-разному разбирает строку и пробельные символы при использовании смешанных числовых и строковых типов вывода:
teststr = "1 is a lonely number";
sscanf (teststr, "%s is a %s")
⇒ 1lonelynumber
sscanf (teststr, "%g is a %s")
⇒
1
108
111
110
101
108
121
[a, b, c] = sscanf ("1 is a lonely number", "%g is a %s %s", "C")
⇒ a = 1
⇒ b = lonely
⇒ c = number При возникновении ошибки сопоставления функция scanf немедленно возвращает управление, оставляя первый несовпавший символ следующим символом для чтения из потока, а функция scanf возвращает все элементы, преобразованные успешно.
Функции форматированного ввода используются не так часто, как функции форматированного вывода. Отчасти это связано с тем, что для их правильного использования требуется соблюдать осторожность. Другая причина заключается в том, что после ошибки сопоставления трудно восстановить работу.
Конкретные флаги и модификаторы, допустимые в строке шаблона, а также их интерпретация подробнее описаны в следующих разделах.
© 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/Formatted-Input.html