sscanf
从字符串中读取格式化数据
语法
A = sscanf(str,formatSpec)
A = sscanf(str,formatSpec,sizeA)
[A,n] = sscanf()___)
[A,n,errmsg] = sscanf(___)
[A,n,errmsg,nextindex] = sscanf(___)
描述
从一个
= sscanf (str
,formatSpec
)str
指定的格式将其转换为formatSpec
,并以数组形式返回结果。str
是字符数组或字符串标量。的sscanf
函数重复应用formatSpec
中的字符序列str
直到它到达str
或者不匹配formatSpec
到一个字符序列。如果str
是包含多行的字符数组,sscanf
按列顺序读取字符。
将输出数组的大小设置为一个
= sscanf (str
,formatSpec
,sizeA
)sizeA
然后从str
到输出数组中。sizeA
必须是一个正整数或有形式(mn)
,在那里米
和n
都是正整数。
例子
将字符向量转换为数字
创建一个字符向量,表示由空白字符分隔的几个数字。将字符向量转换为数字列向量。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
- - - - - -输入要扫描的文本
字符数组|字符串标量
输入要扫描的文本,指定为字符数组或字符串标量。如果str
是字符数组,那么它可以有多行,和sscanf
按列顺序读取字符。
数据类型:字符
|字符串
formatSpec
- - - - - -输入字段的格式
格式化操作
输入字段的格式,使用格式化操作符指定。formatSpec
可以是带单引号的字符向量,也可以是字符串标量。
数值字段
此表列出了将文本转换为数字输出的可用转换说明符。sscanf
将值转换为十进制(以10为基数)表示形式。
数字字段类型 |
转换说明符 |
描述 |
---|---|---|
整数,签署了 |
|
以10为底。 |
|
这些值决定了基数:
|
|
|
64位值,基数为10、8或16。 |
|
整数,无符号 |
|
以10为底。 |
|
以8为底(八进制)。 |
|
|
基数16(十六进制)。 |
|
|
64位值,基数为10、8或16。 |
|
浮点数 |
|
浮点值。输入字段可以包含以下任何内容(不区分大小写): |
字符字段
此表列出了转换文本以使输出为字符数组的可用转换说明符。
字符字段类型 |
转换说明符 |
描述 |
---|---|---|
字符向量或字符串标量 |
|
阅读课文直到 |
|
读取任何单个字符,包括空格。 |
|
模式匹配 |
|
只读括号内的字符,直到第一个不匹配的字符或空格。 例子: |
如果formatSpec
包含数字和字符说明符的组合sscanf
将每个字符转换为其等效的数字。
可选的运营商
要忽略的字段和字符
sscanf
按顺序读取所有数值和字符,除非您告诉它忽略特定字段或字段的一部分。若要跳过字段,请插入星号(*
)后面的百分号(% gydF4y2Ba
).例如,要跳过整数,请指定% * d
。字段宽度
若要指定一次读取的最大数字或文本字符数,请在百分比字符后插入数字。例如,
% 10 c
一次最多读取10个字符,包括空白字符。% 4 f
一次最多读取四位数字,包括小数点。忽略文本
sscanf
忽略紧接在转换说明符之前或之后的指定文本。例子:
水平% u
读取“使”
作为1
。例子:
% uStep
读取的2个步骤
作为2
。
数据类型:字符
|字符串
sizeA
- - - - - -输出阵列尺寸
正
(默认)|整数|双元行向量
输出数组的尺寸,一个
,指明为正
一个正整数,或者一个双元素行向量。
形式的 |
描述 |
---|---|
|
读取输入到最后。 |
|
最多读书 |
|
最多读书 |
数据类型:双
|单
|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
|字符
n
-读入输出数组的元素数量
整数
读入输出数组的元素数,以整数形式返回。
数据类型:双
errmsg
-错误信息
特征向量
错误消息,作为字符向量返回。如果str
包含以下任何数据sscanf
那就不能转换了errmsg
包含错误消息。如果sscanf
然后,成功转换所有数据errmsg
是一个空字符向量。
数据类型:字符
nextindex
-最后一个字符扫描后的位置
整数
扫描的最后一个字符之后的位置,作为整数返回。
数据类型:双
提示
读取函数的格式说明符
sscanf
和fscanf
不同于写入函数的格式sprintf
和流
。读取函数不支持精度字段。金宝appwidth字段为写入指定了最小值,但为读取指定了最大值。
R2006a之前引入
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。