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
是正整数。
示例
将字符向量转换为数值
创建一个表示由空白字符分隔的多个数值的字符向量。将字符向量转换为数值的列向量。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
输入参数
str
— 要扫描的输入文本
字符数组 | 字符串标量
要扫描的输入文本,指定为字符数组或字符串标量。如果 str
是一个字符数组,则它可以具有多行,并且 sscanf
以列顺序读取字符。
数据类型: char
| string
formatSpec
— 输入字段的格式
格式化操作符
输入字段的格式,使用格式化操作符指定。formatSpec
可以是用单引号引起来的字符向量,或字符串标量。
数值字段
下表列出了可用于将文本转换为数值输出的转换设定符。sscanf
将值转换为其十进制(以 10 为基数)的表示形式。
数值字段类型 | 转换设定符 | 说明 |
---|---|---|
有符号整数 |
| 以 10 为基数。 |
| 值确定相应基数:
| |
| 64 位值,以 10、8 或 16 为基数。 | |
无符号整数 |
| 以 10 为基数。 |
| 以 8 为基数(八进制)。 | |
| 以 16 为基数(十六进制)。 | |
| 64 位值,以 10、8 或 16 为基数。 | |
浮点数 |
| 浮点值。输入字段可以包含下列任意项(不区分大小写): |
字符字段
下表列出了可用于转换文本的转换设定符,以便输出是一个字符数组。
字符字段类型 | 转换设定符 | 说明 |
---|---|---|
字符向量或字符串标量 |
| 读取文本,直至 |
| 读取任何单个字符,包括空白。 | |
模式匹配 |
| 只读取方括号中的字符,直到遇到第一个不匹配的字符或空白。 示例: |
如果 formatSpec
包含数值设定符和字符设定符的组合,则 sscanf
将每个字符转换为与其对等的数值。
可选运算符
要忽略的字段和字符
sscanf
按顺序读取所有数值和字符,除非您要求它忽略特定字段或字段中的某一部分。要跳过字段,请在百分比符号 (%
) 后插入星号 (*
)。例如,要跳过整数,请指定%*d
。字段宽度
要指定一次读取的最大位数或文本字符数,请在百分比符号后插入数字。例如,
%10c
一次最多读取 10 个字符,包括空白。%4f
一次最多读取 4 位数,包括小数点。要忽略的字面文本
sscanf
忽略紧挨在转换设定符前面或后面的指定文本。示例:
Level%u
将'Level1'
读作1
。示例:
%uStep
将'2Step'
读作2
。
数据类型: char
| string
sizeA
— 输出数组的维度
Inf
(默认) | 整数 | 二元素行向量
输出数组 A
的维度,指定为 Inf
、正整数或一个二元素行向量。
| 说明 |
---|---|
| 将输入读取到末尾。 |
| 最多读取 |
| 最多读取 |
数据类型: double
| single
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
输出参数
A
— 输出数据
列向量 | 矩阵 | 字符数组
输出数据,以列向量、矩阵或字符数组形式返回。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
n
— 读入输出数组的元素数目
整数
读入输出数组的元素数目,以整数形式返回。
数据类型: double
errmsg
— 错误消息
字符向量
错误消息,以字符向量形式返回。如果 str
包含 sscanf
无法转换的任何数据,则 errmsg
包含错误消息。如果 sscanf
成功转换所有数据,则 errmsg
是空字符向量。
数据类型: char
nextindex
— 最后一个扫描的字符后的位置
整数
最后一个扫描的字符后的位置,以整数形式返回。
数据类型: double
提示
读取函数
sscanf
和fscanf
的格式设定符不同于写入函数sprintf
和fprintf
的格式。读取函数不支持精度字段。宽度字段在写入函数中指定最小值,但在读取函数中指定最大值。
扩展功能
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)