用matlab如何读取修改txt文件

对于如果是纯粹数字组成的txt文件,matlab可以用dlmread或者csvread顺利读取,但是如果其中加入了字符则用这两个函数度去不了,请问如何用matlab读取含... 对于如果是纯粹数字组成的txt文件,matlab可以用dlmread或者csvread顺利读取,但是如果其中加入了字符则用这两个函数度去不了,请问如何用matlab读取含有字符数字字母等的txt文件?
另外还想请教一个问题:当需要用matlab读取一个正在由别的程序生成的文件时,比如,这个文件是有程序A生成的,每次启动程序A后,A都将重新建立一个名字为a.txt的文件,大约每0.1s向这个文件写入一个数据,总过耗时10分钟;现在想要实现这样的功能:当文件a.txt一完成,立即用matlab去读取这个文件中的最后一个数据,并在matlab中运算,给出相应的结果?请问如何用matlab监控a.txt文件完成,并准确读取?
谢谢!
展开
 我来答
精品DIY生活
推荐于2017-09-19 · 知道合伙人数码行家
精品DIY生活
知道合伙人数码行家
采纳数:46447 获赞数:131770
视频剪辑、网络管理、图片处理、办公自动化、文学、语言学。

向TA提问 私信TA
展开全部
  纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了
  例如test.txt文件,内容为“17.901 -1.1111 33.045
   17.891 -1.1286 33.045 17.884 -1.1345 33.045” 可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
bingonut
推荐于2017-09-05 · TA获得超过1306个赞
知道小有建树答主
回答量:987
采纳率:50%
帮助的人:439万
展开全部
方法一:
A = importdata('xxx.txt','分隔符','跳过行数');
data = A.data;

方法二:一行一行读进来,再检查。对大文件比较慢

fidin=fopen('test.txt'); %
打开
test2.txt
文件

fidout=fopen('mkmatlab.txt','w'); %
创建
MKMATLAB.txt
文件

while ~feof(fidin) %
判断是否为
文件末尾

tline=fgetl(fidin); %
从文件读


if double(tline(1))>=48&&double(tline(1))<=57 %
判断首字符
是否是数值

fprintf(fidout,'%s\n\n',tline); %
如果是数字
行,把此行数据写入文件
MKMATLAB.txt
continue %
如果是非数
字继续下一次循环

end
end
fclose(fidout);
追问
谢谢回复
方法一,会将数字字符按照矩阵分开,且每块连续的都不能混杂,比如一行中既有数字又有字符,那数据导入就会中断。

matlab中有相应函数可以实现:每隔很短的时间比如一秒以内,就自动去打开某个特定的文件,从中读取数据,然后将该数据和上次读取的数据进行比对,以此得知该文件是否已经完成。还有当某一个文件正在被写入的时候,有没有什么特别的地方可以被获知?
追答
笨办法倒是有。
【时间】
可以用clock函数得到当前系统【年,月,日,时,分,秒】。
【文件大小】
fid = fopen(filename);
fseek(fid,0,'eof');
fsize = ftell(fid); %fsize就是文件大小!
如果文件大小不变了,就是写完了
【读取文件】
用方法二,一行一行读总是可以的嘛,读进来再自己一个一个处理
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3c63e6c
2014-06-07 · TA获得超过2848个赞
知道大有可为答主
回答量:3829
采纳率:68%
帮助的人:2769万
展开全部
第一个问题,可以参考 fscanf fwrite函数
第二个问题的话,如果你想立即完成就能读取的话,可以先试试反复读取这个文件,但是我不知道如果其他程序调用会不会阻止MATLAB调用这个文件,另一个你可以通过pause等候足够长的时间
更多追问追答
追问
谢谢回复,

用fscanf确实可以将txt中的所有的字符数字都读取出来,但是它忽略了txt中的所有的格式,删除了里面的空格回车等。需要重新排格式。
至于第二个问题,我想首先应该解决的问题是:如何用matlab实现每隔一段时间,比如一秒或者零点五秒钟去就扫描一次被创建中的txt文件,可以通过该文件长度不再变化确认已经读写完成,matlab能显示自动的每隔一段时间就去打开文件确认一下吗?
追答
假如你读取创建中的文件,会不会导致另一个程序无法向当前文件写数据呢??

pause这个函数可以暂停程序一段时间,过一段时间去读取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式