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.

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

%fE, или %g

Значения с плавающей точкой. Поля ввода могут содержать любое из следующих (не чувствительный к регистру): InfInfNaN, или -NaN. Поля ввода, которые представляют числа с плавающей запятой, могут включать ведущий + или - символы и экспоненциальное представление с помощью e или E. Спецификаторы преобразования %fE, и %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- 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 символьный массив и дополнен по мере необходимости с нулевыми символами. (Нулевой символ является управляющим символом с нулем значения.), Если вход содержит меньше, чем 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