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 может быть вектор символов в одинарных кавычках или строковый скаляр.

Numeric Fields

В этой таблице перечислены доступные спецификаторы преобразования для преобразования текста в числовые выходы. 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 все входные поля обрабатываются одинаково.

Character Fields

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

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

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

Описание

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

%s

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

%c

Считывайте любой один символ, включая пробел.
Чтобы считать несколько символов за раз, задайте ширину поля. Для примера, %10c считывает по 10 символов за раз.

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

%[...]

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

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

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

Optional Operators

  • Поля и символы, которые нужно игнорировать

    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, заполненный в порядке столбца.

Типы данных: 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