永发信息网

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);
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯