MATLAB读取txt(包含字母和数字)

【查了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 



你可能感兴趣的:(matlab)