MATLAB中sscanf函数用法

目录

语法

说明

示例

将字符向量转换为数值

转换文本和调整输出数组大小

统计在文本中找到的元素数目

显示错误消息

返回最后一个扫描位置

匹配指定的字符


        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 转换它。指定输出数组的大小。

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 在将字符串转换为数值时放入输出数组的元素数目。

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 不能转换所有输入字符串,将显示错误消息。

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 指示。将温度转换为数值数组。

        要插入度符号 (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

提示

  • 读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值