永发信息网

matlab怎样去读不规则的TXT文件

答案:2  悬赏:10  手机版
解决时间 2021-03-07 19:46
如果一个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补了。请教怎样才能正确读出。
最佳答案
你可以试试fopen这个函数,可以打开一般没有格式的txt,我比较喜欢用。
全部回答
%%方法比较笨 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);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
青岛滨海学院与潍坊科技学院哪个好?哪个比较
【自有岁寒心】岂伊地气暖自有岁寒心.可以荐
隆泰沙发家居广场地址在什么地方,想过去办事
斯威X7怎么注册滴滴呢
武汉类似于熊猫攀达健身房有吗?
花晨月夕差不多成语
<<西游记>>运用哪些艺术表现手法?
金钊源便民店三里店地址有知道的么?有点事想
章鱼保罗猜球一猜一准,它一路把德国队猜进了
不等式x2-5x+6<0的解集为
双汇冷鲜肉批零中心NO.陕D31-001在哪里啊,我
听说在首脑学美发都是用假人头,都没有真人实
QQ飞车一些符号倒K怎么写
求GTA4:自由城之章1.04版本的原版的ScriptHo
我是山西考生想考北京一所大专学校就好,我是
推荐资讯
什么香水子最好 汽车香水补充液和汽
天上人间娱乐会所我想知道这个在什么地方
结合自己的家乡实际(伊犁),谈自治区成立60
无锡太湖边上哪有自助烧烤,工具和东西都是他
新生宝宝呛奶后喉咙像有痰一样怎么办
四海航空这个地址在什么地方,我要处理点事
苹果6和苹果7plus哪个值得购买
彭水火车站打的到外河坝汽车站多少钱
怎样做微信群?群有气氛别人不会退群?
《康熙王朝》中孝庄太后都有哪些令人启迪的智
贵州西南工具集团有限公司职业技术学校(东北
吃什么食物最能长内膜
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?