Spec-Zone.ru › Octave 9

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.

См. также: fgets, fgetl, fread, scanf, sscanf, fopen.

: [val, count, errmsg] = scanf (template, size)
: [v1, v2, …, count, errmsg] = scanf (template, "C")

Эта функция эквивалентна вызову fscanf с fid = stdin.

В настоящее время вызов scanf в интерактивных программах не имеет практического смысла.

См. также: fscanf, sscanf, printf.

: [val, count, errmsg, pos] = sscanf (string, template, size)
: [v1, v2, …, count, errmsg] = sscanf (string, template, "C")

Эта функция похожа на fscanf, за исключением того, что символы считываются из строки string, а не из потока.

Достижение конца строки рассматривается как условие конца файла. Помимо значений, возвращаемых fscanf, в pos возвращается индекс следующего символа для чтения.

См. также: fscanf, scanf, sprintf.

Вызовы 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API