huajun_ming 发表于 2011-8-29 10:58:11

如何读取文件中任意已知内容的一行的数据

各位MATLAB高手,大家好!
我想从一个txt文件里面读取任意一行的数据,首先,假设我只知道这一行的内容,但是不知道具体的行号,应该如何读取。
在网上搜索了一下,都是知道行号,然后可以读取,但是如果我要批量读取,但是每个文件该内容所在的行号不同,那么就容易出错。
比如:我想读取附件中该行内容为“RadiatedEnergy          = 1.078329e+05”的后面的数值赋予某一个变量,如何做。
谢谢!

qibbxxt 发表于 2011-8-29 13:40:34

可以用正则表达式去读取

huajun_ming 发表于 2011-8-30 11:10:52

您好!
如果我要匹配“RadiatedEnergy          = 1.078329e+05”内容的话,是不是这样写啊“x=regexp(tline, 'RadiatedEnergy\s+\d+\w\d{2}', 'match');”?
while ~feof(fidin)
    tline=fgetl(fidin);
    nline=nline+1;
    x=regexp(tline, 'RadiatedEnergy\s+\d+\w\d{2}', 'match');
end

这里的tline应该用文件名fidin吧?但是如果我把tline改为fidin的话,它就提示该行出错,Undefined function or method 'regexp' for input arguments of type 'double'.
但是如果是tline的话,就读取不到信息
是不是我的匹配表达式写错了啊?
该如何写啊?谢谢!

huajun_ming 发表于 2011-8-30 15:41:24

嘿嘿,自己顶一下。
可以首先用fopen打开文件,然后用fgetl逐行读入文件,再用strfind找到想搜索的字符,然后根据所对应的行号,读取该行的内容。
这样的条件是,文件的每一行都是**的信息,不过其他的内容应该可以以此类推。filename_in=input('输入需要读取的文件名(及位置):', 's');
fidin=fopen(filename_in,'r');
nline=0;
while ~feof(fidin)
    tline=fgetl(fidin);
    nline=nline+1;
    if strfind(tline, 'RadiatedEnergy')==1
      =strread(tline, '%*s %*s %f);
      break;
    end
end但是我这段代码中还是有一些问题,就是RadiatedEnergy在我的文本文件中是指数型,但是用strread好像只能是浮点型,那么输出的时候就会有截尾。
求教各位大佬,这该如何解决,谢谢!
页: [1]
查看完整版本: 如何读取文件中任意已知内容的一行的数据