声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4903|回复: 4

[编程技巧] sscanf 函数怎么用呢

[复制链接]
发表于 2007-6-14 11:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
看了help,还是不太懂,请指教一下,解释一下下边的例子就可以了
Example
A = ['abc 46 6 ghi'; 'def 7 89 jkl']                                
A =
   abc 46 6 ghi
   def 7 89 jkl

B = sscanf(A, '%*s %d %d %*s', [2, inf])
B =
   476
   869
回复
分享到:

使用道具 举报

发表于 2007-6-14 12:51 | 显示全部楼层
看看doc sscanf里面讲的比较详细,就懒得给你翻译过来了
发表于 2007-6-14 12:58 | 显示全部楼层
同意楼上的说法,这样的问题多费点心自己就可以搞定了
发表于 2007-6-14 14:33 | 显示全部楼层
原帖由 wewaa 于 2007-6-14 11:59 发表
看了help,还是不太懂,请指教一下,解释一下下边的例子就可以了
Example
A = ['abc 46 6 ghi'; 'def 7 89 jkl']                                
A =
   abc 46 6 ghi
   def 7 89 jkl

B = sscanf(A, ...

每次读取一行,2代表A的行数,而%*s %d %d %*s表示读取每行前面4个组元。
因为sscanf每次读取一个字符,而且读取的顺序是列优先从左到右的,然后同一列元素合为一个数
比如上面的例子中  476  689均为这样的数。
下面这个例子可以拿去佐证:
A = ['a bc 46 6 63 ghi 3 6';
       'd ef 7 89 2 jk9 1  2']
B = sscanf(A, '%*s %*s %d %d %d %*s %d', [2, inf])
结果是B =
   476   623
   869    13
sscanf中用要求输入量内的元素必须严格等长,
像上面这样的用法我还没有用过,感觉没有什么大的用处。doc sscanf例子中不是给出了下面的用法:
for k = 1:2
   C(k,:) = sscanf(A(k, :)', '%*s %d %d %*s', [1, inf]);
end
C
C =
    46     6
     7    89
如果你是为了读取文件里面的数据,可以参考eight的精华帖里面关于txt文本读取的用法。

评分

1

查看全部评分

 楼主| 发表于 2007-6-14 17:00 | 显示全部楼层
原帖由 spano 于 2007-6-14 14:33 发表

每次读取一行,2代表A的行数,而%*s %d %d %*s表示读取每行前面4个组元。
因为sscanf每次读取一个字符,而且读取的顺序是列优先从左到右的,然后同一列元素合为一个数
比如上面的例子中  476  689均为这样的 ...

谢谢您的热心!解释的很详细!:victory:
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 07:25 , Processed in 0.061658 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表