文档

sscanf

从字符串中读取格式化数据

语法

A = sscanf(str,formatSpec)
A = sscanf(str,formatSpec,sizeA)
[A,n] = sscanf()___
[A,n,errmsg] = sscanf(___
[A,n,errmsg,nextindex] = sscanf(___

描述

例子

一个= sscanf (strformatSpecstr指定的格式将其转换为formatSpec,并以数组形式返回结果。str是字符数组或字符串标量。的sscanf函数重复应用formatSpec中的字符序列str直到它到达str或者不匹配formatSpec到一个字符序列。如果str是包含多行的字符数组,sscanf按列顺序读取字符。

例子

一个= sscanf (strformatSpecsizeA将输出数组的大小设置为sizeA然后从str到输出数组中。sizeA必须是一个正整数或有形式(mn),在那里n都是正整数。

例子

一个n= sscanf()___还返回元素的个数sscanf成功解读一个

例子

一个nerrmsg= sscanf()___还返回包含错误消息的字符向量sscanf无法读取所有数据一个。如果sscanf成功,然后errmsg是一个空字符向量。

例子

一个nerrmsgnextindex= sscanf()___中位置的索引str紧跟着最后一个被扫描的字符sscanf

例子

全部折叠

创建一个字符向量,表示由空白字符分隔的几个数字。将字符向量转换为数字列向量。sscanf将空白字符作为数字之间的分隔符。

空空的='2.7183 3.1416 0.0073'
CHR = '2.7183 3.1416 0.0073'
A = sscanf(chr,' % f '
一个=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])
一个=2.7183 3.1416 0.0073

转换str变成一个2 × 2矩阵。因为str只代表三个数字,sscanf一个有足够的0来填满矩阵。

A = sscanf(str,' % f '(2 - 2))
一个=2.7183 0.0073 3.1416 0

创建包含以空白字符分隔的数字的字符串。数一下sscanf将字符串转换为数字时放入输出数组。

从R2017a开始,您可以使用双引号来创建字符串字符串函数。

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

对输出数组中的元素计数一个。方法转换字符串中的数字% d操作符。% d匹配以空格分隔的整数。中元素的个数一个,指定第二个输出参数。

[A,n] = [A,n]' % d '
一个=78 72 64 66 49
N = 5

创建一个字符串并从中读取数据。当sscanf转换所有输入字符串失败,显示错误消息。

从R2017a开始,您可以使用双引号来创建字符串字符串函数。

str =3.14159是圆周率的前六位数字
STR = "3.14159是圆周率的前六位数字"

把数字转换成str。自str还包含以下字符% f不能匹配,sscanf返回错误消息。sscanf一旦遇到单词就停止处理“是”因为它不能被转换成数字。

[A,n,errmsg] = sscanf(str,' % f '
A = 3.1416
N = 1
errmsg = '格式匹配失败。'

创建一个字符向量并从中读取数据。当sscanf转换所有输入失败,返回紧接在位置后面的索引sscanf停止了。使用此索引显示未扫描的输入。

空空的=3.14159是圆周率的前六位数字
CHR = '3.14159是圆周率的前六位数字'

将数据转换为空空的。返回索引。

[A,~,~,nextindex] = sscanf' % f '
A = 3.1416
Nextindex = 9

显示从空空的sscanf没有扫描。

空空的nextindex:结束)
Ans = '是圆周率的前6位'

创建一个包含多个温度的字符串,由度数符号和字母表示F。将温度转换为数值数组。

从R2017a开始,您可以使用双引号来创建字符串字符串函数。插入度数符号(char (176)),使用方法函数。

T =" 78f 72f 64f 66f 49f ";degreessymbol = 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”))
一个=78 72 64 66 49

输入参数

全部折叠

输入要扫描的文本,指定为字符数组或字符串标量。如果str是字符数组,那么它可以有多行,和sscanf按列顺序读取字符。

数据类型:字符|字符串

输入字段的格式,使用格式化操作符指定。formatSpec可以是带单引号的字符向量,也可以是字符串标量。

数值字段

此表列出了将文本转换为数字输出的可用转换说明符。sscanf将值转换为十进制(以10为基数)表示形式。

数字字段类型

转换说明符

描述

整数,签署了

% d

以10为底。

%我

这些值决定了基数:

  • 默认为以10为基数。

  • 如果初始数字是0 x0 x,则值以16为基数(十六进制)。

  • 如果初始数字是0,则值以8为基数(八进制)。

% ld%李

64位值,基数为10、8或16。

整数,无符号

% u

以10为底。

%啊

以8为底(八进制)。

% x

基数16(十六进制)。

陆%%瞧% lx

64位值,基数为10、8或16。

浮点数

% f% e,或% g

浮点值。输入字段可以包含以下任何内容(不区分大小写):,或。表示浮点数的输入字段可以包括前导+-符号和指数表示法的使用eE。转换说明符% f% e,% g它们都以相同的方式处理输入字段。

字符字段

此表列出了转换文本以使输出为字符数组的可用转换说明符。

字符字段类型

转换说明符

描述

字符向量或字符串标量

% s

阅读课文直到sscanf遇到空白。

% c

读取任何单个字符,包括空格。
若要一次读取多个字符,请指定字段宽度。例如,% 10 c一次读10个字符。

模式匹配

%[…]

只读括号内的字符,直到第一个不匹配的字符或空格。

例子:%(亩)读取“夏天”作为“夏”

如果formatSpec包含数字和字符说明符的组合sscanf将每个字符转换为其等效的数字。

可选的运营商

  • 要忽略的字段和字符

    sscanf按顺序读取所有数值和字符,除非您告诉它忽略特定字段或字段的一部分。若要跳过字段,请插入星号(*)后面的百分号(% gydF4y2Ba).例如,要跳过整数,请指定% * d

  • 字段宽度

    若要指定一次读取的最大数字或文本字符数,请在百分比字符后插入数字。例如,% 10 c一次最多读取10个字符,包括空白字符。% 4 f一次最多读取四位数字,包括小数点。

  • 忽略文本

    sscanf忽略紧接在转换说明符之前或之后的指定文本。

    例子:水平% u读取“使”作为1

    例子:% uStep读取的2个步骤作为2

数据类型:字符|字符串

输出数组的尺寸,一个,指明为一个正整数,或者一个双元素行向量。

形式的sizeA输入

描述

读取输入到最后。
对于数值数据,一个是一个列向量。
对于文本数据,一个是一个字符向量。

n

最多读书n数值或空格分隔的字符字段。
对于数值数据,一个是一个列向量。
对于文本数据,一个是一个字符向量。

(mn)

最多读书m * n数值或字符字段。n可以,但不能。一个——- - - - - -n,按列顺序填写。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

输出参数

全部折叠

输出数据,作为列向量、矩阵或字符数组返回。的类别和大小一个指定的转换formatSpec指定的输出数组的大小sizeA

  • 如果formatSpec那么,只包含数字说明符一个是一个数值列向量。如果还指定了sizeA参数,然后一个是指定大小的矩阵,必要时用零填充。如果输入小于sizeA值,然后是大小一个小于sizeA。相反,它是存储从输入扫描的值所需的大小。

    • 如果formatSpec则只包含64位带符号整数说明符一个是一流的int64

    • 如果formatSpec则只包含64位无符号整数说明符一个是一流的uint64

    • 否则,一个是一流的

  • 如果formatSpec只包含% c% s说明符,然后一个是一个字符向量。如果你还指定sizeA,然后一个是一个字符数组,并在必要时用空字符填充。(null字符是一个值为0的控制字符。)如果输入小于sizeA字符,则大小一个小于sizeA。相反,它是存储从输入扫描的字符所需的大小。

  • 如果formatSpec包含数字和字符说明符的组合一个是数字的吗,sscanf将每个字符转换为其等效的数字。这种转换甚至发生在formatSpec显式跳过所有数字字段(例如,formatSpec% * d %年代”).

  • 如果sscanf不能匹配所有的输入formatSpec,然后一个可以是数字或字符数组。的类一个取决于它的值sscanf在停止处理之前读取。

数据类型:|int64|uint64|字符

读入输出数组的元素数,以整数形式返回。

数据类型:

错误消息,作为字符向量返回。如果str包含以下任何数据sscanf那就不能转换了errmsg包含错误消息。如果sscanf然后,成功转换所有数据errmsg是一个空字符向量。

数据类型:字符

扫描的最后一个字符之后的位置,作为整数返回。

数据类型:

提示

  • 读取函数的格式说明符sscanffscanf不同于写入函数的格式sprintf。读取函数不支持精度字段。金宝appwidth字段为写入指定了最小值,但为读取指定了最大值。

R2006a之前引入

这个话题有帮助吗?