第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