Matlab 格式化字符串sscanf

本文详细介绍了Matlab中的sscanf函数,用于从字符串中按特定格式读取数据。通过多个示例展示了如何读取浮点型、整型、字符串等不同类型的数据,以及处理二维字符串数组和混合格式的情况。

sscanf 是按一定的格式从字符串中读取出字符,它有以下几种用法:

A = sscanf(str, format)

A = sscanf(str, format, sizeA)
[A, count] = sscanf(...)
[A, count, errmsg] = sscanf(...)
[A, count, errmsg, nextindex] = sscanf(...)

Description

A = sscanf(str, format)
是从字符串str中按读取文件,并转化成format格式并把它返回到A中。这个函数一直按这个要求读出str数据,直到字符串结束或者已经不能应用format规则。 如果已经不可以应用规则,那么就只把前面已经转化了的字符存到A中,并停止。要是数据超过了一行,那么此函数会按顺序逐行取,直到结束。

A = sscanf(str, format, sizeA)str中读出sizeA个元素存进A,这里的sizeA只能是整数或是数组【m,n】中提取出来的。 

[A, count] = sscanf(...)
返回成功读取到元素个数。

[A, count, errmsg] = sscanf(...) 当操作失败的时候,返回一个错误提示框。 否则, errmsg 就是个空值

[A, count, errmsg, nextindex] = sscanf(...) 返回在str中读取到你指定的第nextindex个字段。

例子 1

从字符串中读取浮点型数据:

s = '2.7183  3.1416'; 
A = sscanf(s,'%f')
A =
    2.7183
    3.1416

例子 2

把八进制的数字用前缀的0来识别,并转成10进制:

sscanf('-010','%i')
ans = 
    -8

例子 3

对于二维的字符串数组. 函数默认是一次读取一行。

mixed = ['abc 45 6 ghi'; 'def 7 89 jkl'];

[nrows, ncols] = size(mixed); 
for k = 1:nrows
    nums(k,:) = sscanf(mixed(k,:), '%*s %d %d %*s', [1, inf]);
end;

键入变量名称,显示结果
nums =
    45     6 
     7    89

例子 4

在字符串中找以 %s为标识的片段:

[str count] = sscanf('ThisIsOneString', '%s')
str =
    ThisIsOneString 
count =
     1

比较上下这两个的不同,可以看出,有了空格,才能够区分出子字符串来。

[str count] = sscanf('These Are Four Strings', '%s') 
str =
    TheseAreFourStrings
count =
     4

sscanf
函数用 %s找到了五个字符串,而用 %c找到了4个空格就是因为有了4个空格,所以下面才会出现空格分隔出的格式串。 

[str count] = sscanf('Five strings and four spaces', '%s%c')
str =
    Five strings and four spaces
count =
    9

str
中有3个字符串和2个数字.因为格式混合,所以sscanf把所有非数字的转成了数字类型。
[str count] = sscanf('5 strings and 4 spaces', '%d%s%s%d%s');
str'
  Columns 1 through 9 
     5   115   116   114   105   110   103   115    97
  Columns 10 through 18 
   110   100     4   115   112    97    99   101   115
count
count =
     5 

例子 5

[str, count] = sscanf('one two three', '%c')
str =
    one two three
count =
    13

[str, count] = sscanf('one two three', '%13c') 
str =
    one two three
count =
     1

[str, count] = sscanf('one two three', '%s')
str =
    onetwothree 
count =
     3

[str, count] = sscanf('one two three', '%1s')
str =
    onetwothree
count =
    11

Example 6 

tempString = '78°F 72°F 64°F 66°F 49°F';

degrees = char(176);
tempNumeric = sscanf(tempString, ['%d' degrees 'F'])'
tempNumeric =
    78    72    64    66    49

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值