爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7950|回复: 8

[参考资料] matlab 如何读取字符串数据混合的文本文件

[复制链接]

新浪微博达人勋

发表于 2015-1-7 16:52:30 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
如何读取特定规则的文本中的数据呢?
假定名为 test.txt 的文件中以下为文件内容
"
你好,我的数据
欢迎来到
百思论坛
www.baisi.net
1 11 111 1111
2 22 222 2222
3 33 333 3333
4 44 444 4444
5 55 555 5555
"
这样的文件怎么读入数据呢?
方法有多种,现举两个比较简单实用的。

方法一:
A=importdata(file,space,line)

其中,file是所读取的文件名,space是特定的分隔符,line是一个数字,指文本中字符串文字的行数,如上文的数据中line=4。
此代码的含义是,line行是title,line+1行到end是数据,按特定分隔符space读取数据。此方法可以读取文本在上和数据在下的文件。
A是一个sturct,其中A.data就是所需的数据了。
exapmle:
A=importdata('test.txt',' ',4);%运行即可取得数据A.data

此方法也可以按以下操作获取:
在文件菜单中选择 file/import data,按照提示进行操作至结束。
command 窗口中输入
>> whos
Name           Size                   Bytes  Class

data           5x4                      160  double array
textdata       4x1                      300  cell array

Grand total is 54 elements using 460 bytes

>> data

data =

          1          11         111        1111
          2          22         222        2222
          3          33         333        3333
          4          44         444        4444
          5          55         555        5555

>> textdata

textdata =

   '你好'
   '欢迎来到'
   '百思论坛'
   'www.baisi.net'


方法二:

[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%d,%f等。
这里%s的个数和[a1,a2,a3,a4]对应。
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)

a1 =

   '1'
   '2'
   '3'
   '4'
   '5'


a2 =

   '11'
   '22'
   '33'
   '44'
   '55'


a3 =

   '111'
   '222'
   '333'
   '444'
   '555'


a4 =

   '1111'
   '2222'
   '3333'
   '4444'
   '5555'
因以字符串的形式读入,所以有''

文件内容形式二(假定文件名为test2.txt):

你好
1 11 111 1111
欢迎来到
2 22 222 2222
百思论坛
3 33 333 3333
www.baisi.net
4 44 444 4444
5 55 555 5555

说明:这种内容格式的文件用上面的方法是不行的。

方法三:

以下是由chinamaker编写的一种方法,但是需要重新建一个文本。
fidin=fopen('test2.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);
MK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来
>> MK

MK =

          1          11         111        1111
          2          22         222        2222
          3          33         333        3333
          4          44         444        4444
          5          55         555        5555




点评

请楼主将帖子进行编辑,否则因论坛里面已经有类似内容,本帖将于24小时之后删除。  发表于 2015-1-8 08:32
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-7 18:48:22 | 显示全部楼层
这个帖子很好哇,一般的文件都可以解决问题了,尤其是第三种方法,用到的机会会很多~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-28 10:05:34 | 显示全部楼层
谢谢分享,这个真心好用
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-28 10:38:35 | 显示全部楼层
恩   不错很实用   
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-7-20 19:34:51 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-8-4 16:40:27 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-8-4 16:40:43 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-12-30 15:41:37 | 显示全部楼层

谢谢分享,这个真心好用
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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