【查了textread函数,但是好像那东西的格式也是固定的。不想钻研了。。放个相关的网址过来
http://guofeiyan01.blog.163.com/blog/static/10552908720111088743523/】
我需要读入这样一个恶心格式的test.txt:
tra 3
ID 1
IMAGE 1 28
ID 3
IMAGE 6 20
ID 2
IMAGE 8 2987
之前读东西的时候都是固定用这个的:
**********************
'a.txt'
1 2 3
1.10 3.2 4
33 2.1 7.2
***********************
fid = fopen(‘a.txt’,'r');
while 1
data = fgets(fid);%按行读.得到的data为char型
if data < 0
break;
end
temp = sscanf(data, '%f,%f,%f');
end
这时候在读第一行的时候我就想用
temp = sscanf(data, '%s %f');
但是得到的是4x1的列向量。值为:116 114 97 3
【话说如果用temp =sscanf(data,'%s$');会得到 temp = 'tra';】
试了 temp = sscanf(data, '%s %s'); % temp='tra3'
试了 temp = sscanf(data, '%f %f'); %temp为空
蠢人最后决定一个字符一个字符地读了。。。
fidin=fopen('test.txt');
while~feof(fidin)
words = [];
num = [];
tline=fgetl(fidin);
data=sscanf(tline, '%s %f');
for i = 1 : size(tline,2)
if double(tline(i))>=48&&double(tline(i))<=57
num = [num tline(i)];
elseif (double(tline(i))>=65 && double(tline(i))<=90) ||...
(double(tline(i))>=97 && double(tline(i))<=122)
words = [words char(tline(i))];
end
end
end
fclose(fidout);
其实问题简化为:
temp = 'abc 3 6'; % char型
如果把char型的temp用一个函数分成字母traj和数字3呢?
再次百度了下sscanf这个函数。。。发现了它好多用法。。
data = sscanf(temp,'%*s %d %d'); %这样子得到的data就是[3;6].
算是解决了吧。反正我本来就打算只读数字的╮(╯-╰)╭
最后的重点只在于,用fgetl或者fgets函数,一行一行地得到数据。再用sscanf分别得到字母和数字。(* ̄▽ ̄)y