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

matlab能否读取读取文件中的某一段数据?

[复制链接]
发表于 2013-11-30 15:17:24 | 显示全部楼层 |阅读模式 来自 辽宁大连
大家好,最近想利用matlab提取文本文件中的某一段数据,并把它这些数据放在数组中,请问有什么好的读取方法?
以前读取某二进制文件的时候,是利用fread函数读取整个二进制文件,然后再把某段需要的数据放在数组中。但是对于较大的模型,读起来效率就会低。
所以想这次读取文本文件的时候知道那一段数据,然后直接读取,请问这样是否可以?
附件是文本文件,可以利用记事本打开。我想读取文件中的这段数据:
*ELSET, ELSET=weld_2_e
       489,       488,       499,       500,       496,       466,       464,       474,
       475,       471,       596,       598,       600,       583,       585,       571,
       575,       574,       557,       558
*NSET, NSET=weld_2_n, UNSORTED
       533,       612,       610,       615,       614,       585,       596,       594,
       599,       598,       564,       697,       698,       686,       690,       666,
       681,       682,       670,       674,       555
*ELSET, ELSET=weld_1_e
       392,       393,       394,       380,       381,       447,       449,       444,
       438,       440,       194,       200,       199,       180,       181,       242,
       243,       244,       230,       231
*NSET, NSET=weld_1_n, UNSORTED
       133,       458,       459,       451,       454,       428,       501,       499,
       495,       497,       152,       287,       288,       280,       283,       257,
       323,       324,       316,       319,        91
并把他们放入不同的数组,请问如何实现?

本帖子中包含更多资源

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

×
发表于 2013-12-1 11:55:04 | 显示全部楼层 来自 北京
回复 不支持

使用道具 举报

 楼主| 发表于 2013-12-2 15:36:58 | 显示全部楼层 来自 辽宁大连
本帖最后由 nibam11 于 2013-12-2 15:38 编辑

谢谢版主的解答。
看了版主给的索引,我的理解是可以用那种方法找到某些特定的字符。
那么,找到这些特定的字符之后,能否用某种命令定位到那,然后再从那个位置读起,把后边的数据写入数组?
回复 不支持

使用道具 举报

发表于 2013-12-3 08:32:06 | 显示全部楼层 来自 北京
nibam11 发表于 2013-12-2 15:36
谢谢版主的解答。
看了版主给的索引,我的理解是可以用那种方法找到某些特定的字符。
那么,找到这些特定 ...

x=regexp(string,exp)返回的就是位置
回复 不支持

使用道具 举报

 楼主| 发表于 2013-12-3 11:07:10 | 显示全部楼层 来自 辽宁大连
liuyalong008 发表于 2013-12-3 08:32
x=regexp(string,exp)返回的就是位置

感谢版主的耐心解答,我看了下regexp返回的结果是1,这是我的程序,但是没有从NSET开始读取啊
fid=fopen('hanfeng.inp','r')
str='NSET, NSET=weld_1_n, UNSORTED'
a1=regexp(str,'NSET, NSET')
fseek(fid,1,'cof')
fgetl(fid)
fgetl(fid)
fgetl(fid)
fgetl(fid)
fgetl(fid)
fgetl(fid)
还请版主不吝赐教,谢谢!
回复 不支持

使用道具 举报

发表于 2013-12-3 13:13:20 | 显示全部楼层 来自 北京
nibam11 发表于 2013-12-3 11:07
感谢版主的耐心解答,我看了下regexp返回的结果是1,这是我的程序,但是没有从NSET开始读取啊
fid=fopen( ...

你的意思是不是:
  1. str='NSET, NSET=weld_1_n, UNSORTED'
  2. a1=regexp(str,'(?<=NSET, NSET).*?')
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2013-12-3 14:39:59 | 显示全部楼层 来自 辽宁大连

我运行版主给的代码,返回的值是11,附上运行结果截图和我所使用的程序段
fid=fopen('hanfeng.inp','r')
str='NSET, NSET=weld_1_n, UNSORTED'
a1=regexp(str,'(?<=NSET, NSET).*?')
fseek(fid,11,'cof')
fgetl(fid)
fgetl(fid)
我想从NSET开始读取,读取后边的数据,并把他们放入不同的数组之中
这是我想读取的数据:
*NSET, NSET=weld_1_n, UNSORTED
       133,       458,       459,       451,       454,       428,       501,       499,
       495,       497,       152,       287,       288,       280,       283,       257,
       323,       324,       316,       319,        91
我对matlab是边学边用的,还有很多不懂的,给版主添麻烦了。
回复 不支持

使用道具 举报

 楼主| 发表于 2013-12-3 14:42:01 | 显示全部楼层 来自 辽宁大连
这是运行结果的截图

本帖子中包含更多资源

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

×
回复 不支持

使用道具 举报

发表于 2013-12-4 08:30:57 | 显示全部楼层 来自 北京
nibam11 发表于 2013-12-3 14:42
这是运行结果的截图
  1. str = fileread('C:\Users\Administrator\Desktop\New Text Document.txt')
  2. a1=regexp(str,'(?<=NSET, NSET.*?)\d{2,}','match')
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-12-4 10:27:42 | 显示全部楼层 来自 辽宁大连

谢谢版主耐心回答,这次的结果比我想要的多了后边的一部分。虽然我看不明白,不过还是要谢谢你。
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-15 00:59 , Processed in 0.044082 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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