nibam11 发表于 2013-11-30 15:17:24

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

大家好,最近想利用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
并把他们放入不同的数组,请问如何实现?

liuyalong008 发表于 2013-12-1 11:55:04

请参考本版正则系列
http://forum.simwe.com/thread-1081597-1-1.html

nibam11 发表于 2013-12-2 15:36:58

本帖最后由 nibam11 于 2013-12-2 15:38 编辑

liuyalong008 发表于 2013-12-1 11:55
请参考本版正则系列
http://forum.simwe.com/thread-1081597-1-1.html
谢谢版主的解答。
看了版主给的索引,我的理解是可以用那种方法找到某些特定的字符。
那么,找到这些特定的字符之后,能否用某种命令定位到那,然后再从那个位置读起,把后边的数据写入数组?

liuyalong008 发表于 2013-12-3 08:32:06

nibam11 发表于 2013-12-2 15:36
谢谢版主的解答。
看了版主给的索引,我的理解是可以用那种方法找到某些特定的字符。
那么,找到这些特定 ...

x=regexp(string,exp)返回的就是位置

nibam11 发表于 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)
还请版主不吝赐教,谢谢!

liuyalong008 发表于 2013-12-3 13:13:20

nibam11 发表于 2013-12-3 11:07
感谢版主的耐心解答,我看了下regexp返回的结果是1,这是我的程序,但是没有从NSET开始读取啊
fid=fopen( ...

你的意思是不是: str='NSET, NSET=weld_1_n, UNSORTED'
a1=regexp(str,'(?<=NSET, NSET).*?')

nibam11 发表于 2013-12-3 14:39:59

liuyalong008 发表于 2013-12-3 13:13
你的意思是不是:

我运行版主给的代码,返回的值是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是边学边用的,还有很多不懂的,给版主添麻烦了。

nibam11 发表于 2013-12-3 14:42:01

这是运行结果的截图

liuyalong008 发表于 2013-12-4 08:30:57

nibam11 发表于 2013-12-3 14:42
这是运行结果的截图

str = fileread('C:\Users\Administrator\Desktop\New Text Document.txt')
a1=regexp(str,'(?<=NSET, NSET.*?)\d{2,}','match')

nibam11 发表于 2013-12-4 10:27:42

liuyalong008 发表于 2013-12-4 08:30


谢谢版主耐心回答,这次的结果比我想要的多了后边的一部分。虽然我看不明白,不过还是要谢谢你。
页: [1]
查看完整版本: matlab能否读取读取文件中的某一段数据?