sscanf

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

Синтаксис

A = sscanf(str,formatSpec)
A = sscanf(str,formatSpec,sizeA)
[A,n] = sscanf(___)
[A,n,errmsg] = sscanf(___)
[A,n,errmsg,nextindex] = 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] читает 'лето' как '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-by-n, заполнил порядка следования столбцов.

Типы данных: удвойтесь | единственный | 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 является символьным массивом и дополнен по мере необходимости с нулевыми символами. (Нулевой символ является управляющим символом с нулем значения.), Если входной параметр содержит меньше, чем символы sizeA, то размер A меньше, чем sizeA. Вместо этого это - размер, требуемый сохранить символы, отсканированные от входного параметра.

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

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

Типы данных: удвойтесь | int64 | uint64 | char

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

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

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

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

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

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

Советы

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

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

Была ли эта тема полезной?