找回密码
 注册
Simdroid-非首页
查看: 92|回复: 3

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

[复制链接]
发表于 2011-8-29 10:58:11 | 显示全部楼层 |阅读模式 来自 湖北武汉
各位MATLAB高手,大家好!
我想从一个txt文件里面读取任意一行的数据,首先,假设我只知道这一行的内容,但是不知道具体的行号,应该如何读取。
在网上搜索了一下,都是知道行号,然后可以读取,但是如果我要批量读取,但是每个文件该内容所在的行号不同,那么就容易出错。
比如:我想读取附件中该行内容为“RadiatedEnergy          = 1.078329e+05”的后面的数值赋予某一个变量,如何做。
谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2011-8-29 13:40:34 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
可以用正则表达式去读取
回复 不支持

使用道具 举报

 楼主| 发表于 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的话,就读取不到信息
是不是我的匹配表达式写错了啊?
该如何写啊?谢谢!
回复 不支持

使用道具 举报

 楼主| 发表于 2011-8-30 15:41:24 | 显示全部楼层 来自 湖北武汉
嘿嘿,自己顶一下。
可以首先用fopen打开文件,然后用fgetl逐行读入文件,再用strfind找到想搜索的字符,然后根据所对应的行号,读取该行的内容。
这样的条件是,文件的每一行都是**的信息,不过其他的内容应该可以以此类推。
  1. filename_in=input('输入需要读取的文件名(及位置):', 's');
  2. fidin=fopen(filename_in,'r');
  3. nline=0;
  4. while ~feof(fidin)
  5.     tline=fgetl(fidin);
  6.     nline=nline+1;
  7.     if strfind(tline, 'RadiatedEnergy')==1
  8.         [RadiatedEnergy]=strread(tline, '%*s %*s %f);
  9.         break;
  10.     end
  11. end
复制代码
但是我这段代码中还是有一些问题,就是RadiatedEnergy在我的文本文件中是指数型,但是用strread好像只能是浮点型,那么输出的时候就会有截尾。
求教各位大佬,这该如何解决,谢谢!
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-3 05:30 , Processed in 0.033500 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表