exponenta event banner

sscanf

Считывание отформатированных данных из строк

Описание

пример

A = sscanf(str,formatSpec) считывает данные из str, преобразует его в соответствии с форматом, указанным в formatSpecи возвращает результаты в массиве. str является массивом символов или строковым скаляром. sscanf функция применяется неоднократно formatSpec к последовательностям символов в str до тех пор, пока он не достигнет конца str или не соответствует formatSpec к последовательности символов. Если str - символьный массив с несколькими строками, sscanf считывает символы в порядке столбцов.

пример

A = sscanf(str,formatSpec,sizeA) устанавливает размер выходного массива равным sizeA а затем считывает данные из str в выходной массив. sizeA должно быть положительным целым числом или иметь вид [m n], где m и n являются положительными целыми числами.

пример

[A,n] = sscanf(___) также возвращает число элементов, которые sscanf успешно считывает в A.

пример

[A,n,errmsg] = sscanf(___) также возвращает символьный вектор, содержащий сообщение об ошибке, когда sscanf не удалось прочесть все данные в A. Если sscanf успешно, то errmsg - пустой символьный вектор.

пример

[A,n,errmsg,nextindex] = sscanf(___) также возвращает индекс позиции в str который немедленно следует за последним символом, отсканированным sscanf.

Примеры

свернуть все

Создайте символьный вектор, представляющий несколько чисел, разделенных пробелами. Преобразование символьного вектора в столбчатый вектор чисел. sscanf обрабатывает символы пробела как разделители между числами.

chr = '2.7183  3.1416  0.0073'
chr = 
'2.7183  3.1416  0.0073'
A = sscanf(chr,'%f')
A = 3×1

    2.7183
    3.1416
    0.0073

Создайте строку, представляющую несколько чисел, и преобразуйте ее с помощью sscanf. Укажите размер выходного массива.

Начиная с R2017a, можно создавать строки с помощью двойных кавычек.

str = "2.7183  3.1416  0.0073"
str = 
"2.7183  3.1416  0.0073"
A = sscanf(str,'%f',[1 3])
A = 1×3

    2.7183    3.1416    0.0073

Новообращенный str в матрицу 2 на 2. Поскольку str представляет только три числа, sscanf подушки A с достаточным количеством нулей для заполнения матрицы.

A = sscanf(str,'%f',[2 2])
A = 2×2

    2.7183    0.0073
    3.1416         0

Создайте строку, содержащую числа, разделенные пробелами. Подсчитать элементы, которые sscanf помещает в выходной массив, когда преобразует строку в числа.

Начиная с R2017a, можно создавать строки с помощью двойных кавычек.

str = "78 72 64 66 49"
str = 
"78 72 64 66 49"

Подсчитать элементы в выходном массиве A. Преобразование чисел в строке с помощью %d оператор. %d совпадает с целыми числами, разделенными пробелами. Возврат количества элементов в A, укажите второй выходной аргумент.

[A,n] = sscanf(str,'%d')
A = 5×1

    78
    72
    64
    66
    49

n = 5

Создайте строку и прочитайте из нее данные. Когда sscanf не удалось преобразовать всю входную строку, отобразите сообщение об ошибке.

Начиная с R2017a, можно создавать строки с помощью двойных кавычек.

str = "3.14159 are the first 6 digits of pi"
str = 
"3.14159 are the first 6 digits of pi"

Преобразование числа в str. С тех пор str также содержит символы, которые %f не может соответствовать, sscanf возвращает сообщение об ошибке. sscanf прекращает обработку, как только встречается слово 'are' потому что его нельзя преобразовать в число.

[A,n,errmsg] = sscanf(str,'%f')
A = 3.1416
n = 1
errmsg = 
'Matching failure in format.'

Создайте вектор символов и считайте из него данные. Когда sscanf не удалось преобразовать все входные данные, вернуть индекс, который сразу следует за позицией, в которой sscanf остановлено. Этот индекс используется для отображения незасканированных входных данных.

chr = '3.14159 are the first 6 digits of pi'
chr = 
'3.14159 are the first 6 digits of pi'

Преобразование данных в chr. Верните индекс.

[A,~,~,nextindex] = sscanf(chr,'%f')
A = 3.1416
nextindex = 9

Отображение символов из chr это sscanf не сканировал.

chr(nextindex:end)
ans = 
'are the first 6 digits of pi'

Создание строки, содержащей несколько температур, обозначенных символом градуса и буквой F. Преобразование температур в числовой массив.

Начиная с R2017a, можно создавать строки с помощью двойных кавычек. Вставка обозначения степени (char(176)), используйте insertBefore функция.

T = "78F 72F 64F 66F 49F";
degreeSymbol = char(176);
T = insertBefore(T,'F',degreeSymbol)
T = 
"78°F 72°F 64°F 66°F 49°F"

Возвращает значения температур в виде числового массива.

A = sscanf(T,strcat("%d",degreeSymbol,"F"))
A = 5×1

    78
    72
    64
    66
    49

Входные аргументы

свернуть все

Входной текст для сканирования, заданный как массив символов или скаляр строки. Если str является символьным массивом, то он может иметь несколько строк, и sscanf считывает символы в порядке столбцов.

Типы данных: char | string

Формат полей ввода, заданный с помощью операторов форматирования. formatSpec может быть символьным вектором в одиночных кавычках или строковым скаляром.

Числовые поля

В этой таблице перечислены доступные спецификаторы преобразования для преобразования текста в числовые выходные данные. sscanf преобразует значения в их десятичное (базовое 10) представление.

Числовой тип поля

Спецификатор преобразования

Описание

Целое число, с подписью

%d

База 10.

%i

Значения определяют базу:

  • По умолчанию используется база 10.

  • Если начальные цифры 0x или 0X, то значения являются базовыми 16 (шестнадцатеричными).

  • Если начальная цифра равна 0, то значения являются основаниями 8 (восьмеричными).

%ld или %li

64-разрядные значения, базовые 10, 8 или 16.

Целое число, без знака

%u

База 10.

%o

Основание 8 (восьмеричное).

%x

База 16 (шестнадцатеричная).

%lu, %lo, %lx

64-разрядные значения, базовые 10, 8 или 16.

Число с плавающей запятой

%f, %e, или %g

Значения с плавающей запятой. Поля ввода могут содержать любое из следующих значений (без учета регистра): Inf, -Inf, NaN, или -NaN. Поля ввода, представляющие числа с плавающей запятой, могут включать ведущие + или - символы и экспоненциальная нотация с использованием e или E. Спецификаторы преобразования %f, %e, и %g все поля ввода обрабатываются одинаково.

Символьные поля

В этой таблице перечислены доступные спецификаторы преобразования для преобразования текста таким образом, чтобы выходные данные представляли собой символьный массив.

Тип символьного поля

Спецификатор преобразования

Описание

Вектор символов или строковый скаляр

%s

Читать текст до sscanf встречает пробел.

%c

Прочитайте любой отдельный символ, включая пробел.
Для одновременного чтения нескольких символов укажите ширину поля. Например, %10c читает по 10 символов одновременно.

Сопоставление шаблонов

%[...]

Только чтение символов в скобках вплоть до первого несоответствующего символа или пробела.

Пример: %[mus] читает 'summer ' как 'summ'.

Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем sscanf преобразует каждый символ в числовой эквивалент.

Дополнительные операторы

  • Игнорируемые поля и символы

    sscanf считывает все числовые значения и символы в последовательности, если не указано игнорировать определенное поле или часть поля. Чтобы пропустить поля, вставьте звездочку (*после знака процента (%). Например, чтобы пропустить целые числа, укажите %*d.

  • Ширина поля

    Чтобы указать максимальное количество цифр или текстовых символов для чтения за один раз, вставьте число после символа процента. Например, %10c читает до 10 символов одновременно, включая пробел. %4f считывает до четырех цифр одновременно, включая десятичную точку.

  • Пропускаемый текст литерала

    sscanf игнорирует указанный текст непосредственно перед спецификатором преобразования или после него.

    Пример: Level%u читает 'Level1' как 1.

    Пример: %uStep читает '2Step' как 2.

Типы данных: char | string

Размеры выходного массива, A, указано как Inf, положительное целое число или двухэлементный вектор строки.

Форма sizeA Вход

Описание

Inf

Считывайте входные данные до конца.
Для числовых данных, A является вектором-столбцом.
Для текстовых данных, A - символьный вектор.

n

Читать максимум n числовые значения или разделенные пробелами символьные поля.
Для числовых данных, A является вектором-столбцом.
Для текстовых данных, A - символьный вектор.

[m n]

Читать максимум m*n числовые значения или символьные поля. n может быть Inf, но m не может. A является mоколо-n, заполнен порядок столбцов.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Выходные данные, возвращаемые в виде вектора столбца, матрицы или символьного массива. Класс и размер A зависят от преобразований, указанных в formatSpec и размер выходного массива, указанный sizeA:

  • Если formatSpec содержит только числовые спецификаторы, затем A - числовой вектор столбца. Если также указать sizeA аргумент, затем A является матрицей указанного размера и при необходимости заполняется нулями. Если входные данные содержат менее sizeA значения, затем размер A меньше, чем sizeA. Вместо этого это размер, необходимый для хранения значений, отсканированных из входных данных.

    • Если formatSpec содержит только 64-разрядные целочисленные спецификаторы со знаком, затем A имеет класс int64.

    • Если formatSpec содержит только 64-разрядные целочисленные спецификаторы без знака, затем A имеет класс uint64.

    • В противном случае A имеет класс double.

  • Если formatSpec содержит только %c или %s спецификаторы, затем A - символьный вектор. Если также указать sizeA, то A представляет собой символьный массив и при необходимости дополняется нулевыми символами. (Символ null - это управляющий символ с нулевым значением.) Если входные данные содержат менее sizeA символы, затем размер A меньше, чем sizeA. Вместо этого это размер, необходимый для хранения символов, отсканированных из ввода.

  • Если formatSpec содержит комбинацию числовых и символьных спецификаторов, затем A числовой, класса double, и sscanf преобразует каждый символ в числовой эквивалент. Это преобразование происходит даже тогда, когда formatSpec явно пропускает все числовые поля (например, formatSpec является '%*d %s').

  • Если sscanf не может совпадать со всеми входными данными для formatSpec, то A может быть числовым или символьным массивом. Класс A зависит от значений, которые sscanf считывает до прекращения обработки.

Типы данных: double | int64 | uint64 | char

Число элементов, считанных в выходной массив, возвращаемое как целое число.

Типы данных: double

Сообщение об ошибке, возвращенное в виде символьного вектора. Если str содержит любые данные, которые sscanf не может преобразовать, то errmsg содержит сообщение об ошибке. Если sscanf успешно преобразует все данные, затем errmsg - пустой символьный вектор.

Типы данных: char

Позиция после последнего отсканированного символа, возвращаемого в виде целого числа.

Типы данных: double

Совет

  • Спецификаторы формата для функций чтения sscanf и fscanf отличаются от форматов для функций записи sprintf и fprintf. Функции считывания не поддерживают поле точности. Поле width указывает минимум для записи, но максимум для чтения.

Представлен до R2006a