目录
语法
说明
示例
将字符向量转换为数值
转换文本和调整输出数组大小
统计在文本中找到的元素数目
显示错误消息
返回最后一个扫描位置
匹配指定的字符
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×12.71833.14160.0073
转换文本和调整输出数组大小
创建表示多个数值的字符串,并使用 sscanf 转换它。指定输出数组的大小。
str = "2.7183 3.1416 0.0073"
str =
"2.7183 3.1416 0.0073"
A = sscanf(str,'%f',[1 3])
A = 1×32.7183 3.1416 0.0073
将 str 转换为 2×2 矩阵。由于 str 仅代表三个数值,因此 sscanf 会用足够多的零填充 A 以填满矩阵。
A = sscanf(str,'%f',[2 2])
A = 2×22.7183 0.00733.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×17872646649n = 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×17872646649
提示
-
读取函数 sscanf 和 fscanf 的格式设定符不同于写入函数 sprintf 和 fprintf 的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。