请教Matlab 读取txt 文件 读取矩阵问题?

txt 文件格式是这样子的:

23 45 78 89 23
23 23 22 44 45
11 32 33 44 55

21 45 38 89 22
22 23 22 42 45
34 32 33 44 12
21 23 24 44 46

18 78 66 23 56
14 34 44 51 34
11 32 45 81 33

22 23 22 42 45
34 32 33 44 12

有很多组这样的数据 行数不固定 要求用 matlab 判断出每组的最后一个数字 第一组是 55 第二组是 46....判断 如果末尾数 大于 50 就把 组号记录下来 第一组就记录 1 第二组记录 2

以Matlab R2012b为例。

1、首先打开matlab;

2、选择current folder并加入当前路径;

3、选择指定的txt文件,右键,选择导入数据;

4、选择相应的数据类型,这里应选matrix。

具体如下图所示:

1、开始导入数据

2、导入数据

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-04-06
末尾数??
这个比较抽象。

按字面意思,弄了一个:

clear
fid=fopen('data.txt','r');
group50=[]; %大于50的组号
groupdata=[]; %每组的数据(只记录读取过程中的最后一组)
groupid=1; %组号
while (~feof(fid))
linetext=fgetl(fid); %读取一行
if isempty(linetext) %空行,意味着一组数的终止
groupLastData=dataline(end); %上一行最后一个数据
if groupLastData>50
group50=[group50,groupid]; %记录这个组号
end
groupdata=[]; %新的组开始,清除group中的数据
groupid=groupid+1; %组号加一
continue; %跳出本次循环,即直接读下一行
end
dataline=sscanf(linetext,'%d'); %将本行的字符串转成数组
end
fclose(fid);

group50本回答被提问者采纳
第2个回答  2009-11-25
这是一个简单的算法:
读取txt按字节判断
1.某一个字节的ascii码:ch(i)大于‘0’而小于‘9’并且ch(i+1)==10并且ch(i+2)不在‘0’到‘9’之间
第一布就找到了矩阵的最后一个元素,每当满足条件矩阵数目matrix_num=matrix_num+1;
2.当满足1时,判断(ch(i)-48)+(ch(i-1)-48)*10是否大于50
满足2,则记录matrix_num
%%%%%%%%%%%%%%%%%%test.txt%%%%%%%%%%%%%%%%%%%%%%%%%
23 45 78 89 23
23 23 22 44 45
11 32 33 44 55

21 45 38 89 22
22 23 22 42 45
34 32 33 44 12
21 23 24 44 46

18 78 66 23 56
14 34 44 51 34
11 32 45 81 33

22 23 22 42 45
34 32 33 44 12

%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%test.m%%%%%%%%%%%%%%%%%%%%%
clear
fid=fopen('test.txt','rt');
[ch,count]=fcanf(fid,'%c');
matrix_num=0;
temp=[];

for i=2:count-1
if (ch(i)>='0')&&(ch(i)<='9')&&(ch(i+1)==10)&&(ch(i+2)<'0')
matrix_num=matrix_num+1;
if ((ch(i)-48)+(ch(i-1)-48)*10)>50
temp=[temp,matrix_num];
end
end
end

temp
第3个回答  2009-11-25
稍微长了点,不想改了。
该程序保证在某些极端特例下也能得到正确结果。这些极端条件包括:
数与数之间的空格可能不止一个。
每行后面可能有多余的空格。
两组之间的空行可能含有多余空格。
两组之间可能有多个空行。
最初和最末可能有多余空行。
用的是下面的测试文件aa.txt
——————————————————————

23 45 78 89 23
23 23 22 44 45
11 32 33 44 55

21 45 38 89 22
22 23 22 42 45
34 32 33 44 12
21 23 24 44 46

18 78 66 23 56
14 34 44 51 34
11 32 45 81 35

22 23 22 42 45
34 32 33 44 54

————————————————————————
下面是程序
clear;clc;
fid=fopen('aa.txt','r');%文件名自己改
n=0;c=[];flag=0;
while 1
a=fgetl(fid);
if a==-1
if flag
n=n+1;
if b>50
c=[c,n];
end
end
break;
end
a=str2num(a);
if isempty(a)
if flag
n=n+1;
if b>50
c=[c,n];
end
flag=0;
end
else
b=a(end);
flag=1;
end
end
fclose(fid);
c