matlab怎样去读不规则的TXT文件
答案:2 悬赏:10 手机版
解决时间 2021-03-07 19:46
- 提问者网友:低吟詩仙的傷
- 2021-03-07 16:24
如果一个txt文件中的数据不是规则的矩阵形式,例如【1 2 3;23;2 5 6 1】,第一行三个数据,第二行第三行分别一个和四个数据,现在想把数据读出来组合成2*4的矩阵。用load读不了,用textread读出来是【1 2 3 0;23 0 0 0;2 5 6 1】,即空格用0补了。请教怎样才能正确读出。
最佳答案
- 五星知识达人网友:由着我着迷
- 2021-03-07 18:04
你可以试试fopen这个函数,可以打开一般没有格式的txt,我比较喜欢用。
全部回答
- 1楼网友:纵马山川剑自提
- 2021-03-07 19:01
%%方法比较笨
fid=fopen('d:\data.txt','r');
numline=0;
datax=[];
datay=[];
dataz=[];
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
numline=numline+1;
if (numline<=14) %去掉文件头,因为文件头中含有xyz会对下面编程造成很大干扰,你这个要修改文件头的行数
continue;
end
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,'x'); %假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(xlocal))
xx=sscanf(lineinfo(xlocal:end),'x%f');
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,'y'); %假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(ylocal))
yy=sscanf(lineinfo(ylocal:end),'y%f');
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,'z'); %假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(zlocal))
zz=sscanf(lineinfo(zlocal:end),'z%f');
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个xyz
datax=[datax;xx];
datay=[datay;yy];
dataz=[dataz;zz];
end
end
fclose(fid);
fid=fopen('d:\dataxyz.txt','w');
for i=1:length(datax)
fprintf(fid,'%f\t%f\t%f\r\n',datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
=====================修改版=================
%%逻辑判断比较复杂
fid=fopen('d:\data.txt','r');
numline=0;
datax=[];
datay=[];
dataz=[];
while(~feof(fid))
lineinfo=fgetl(fid);%读一行数据
numline=numline+1;
if (isempty(lineinfo))
continue; %空行,重新读下一行
end
flag=0;
xlocal=findstr(lineinfo,'x'); %假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(xlocal) && ( (lineinfo(xlocal+1)>='0' && lineinfo(xlocal+1)<='9') || lineinfo(xlocal+1)=='-'))
xx=sscanf(lineinfo(xlocal:end),'x%f');
flag=1;
else
xx=0;
end
ylocal=findstr(lineinfo,'y');%假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(ylocal) && ((lineinfo(ylocal+1)>='0' && lineinfo(ylocal+1)<='9') || lineinfo(ylocal+1)=='-'))
yy=sscanf(lineinfo(ylocal:end),'y%f');
flag=1;
else
yy=0;
end
zlocal=findstr(lineinfo,'z');%假定一行最多只能有一个关键字符x,另外这里是区分大小写的
if (~isempty(zlocal) && ((lineinfo(zlocal+1)>='0' && lineinfo(zlocal+1)<='9') || lineinfo(zlocal+1)=='-'))
zz=sscanf(lineinfo(zlocal:end),'z%f');
flag=1;
else
zz=0;
end
if (flag==1) %表明至少找到一个xyz
datax=[datax;xx];
datay=[datay;yy];
dataz=[dataz;zz];
end
end
fclose(fid);
fid=fopen('d:\dataxyz.txt','w');
for i=1:length(datax)
fprintf(fid,'%f\t%f\t%f\r\n',datax(i),datay(i),dataz(i)); %这里用\r\n是方便计算本查看。事实上\n就可以了
end
fclose(fid);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯