请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

matlab对文本文件、数据文件等的文件读取、操作等实用功能总结(转载 CSDN) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

根据txt文档不同种类介绍不同的读取数据方法

一、纯数据文件(没有字母和中文,纯数字)

对于这种txt文档,从matalb中读取就简单多了

例如test.txt文件,内容为

17.901 -1.1111 33.045 
17.891 -1.1286 33.045 
17.884 -1.1345 33.045

可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。

二、中英文和数据如test1.txt

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


这样的文件怎么读入数据呢? 
方法有多种,现举两个比较简单实用的。

方法一: 
file/import data....../next/finish 
>> 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 =

    \'你好\' 
    \'欢迎来到\' 
    \'论坛\' 
    \'edu.cn\'

方法二: 
[a1,a2,a3,a4]=textread(\'test1.txt\',\'%s%s%s%s\',\'headerlines\',4) 
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%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\' 
因以字符串的形式读入,所以有\'\'。 
————————————————————————————————

三、中文 数据 英文 混乱如test.txt

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

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

以下是由chinamaker编写的一种方法:

fidin=fopen(\'test.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

---------------------------------------------------------------

我的txt数据里既有数字又有字符串,形式为:
0.129515 DDAA  01  2.24609 94.50000  98
0.130434 DDAA  01  2.24609 96.30000  9A
0.131441 DDAA  01  2.24609 97.20000  9B
0.132448 DDAA  01  2.24609 99.00000  9D
0.133507 DDAA  01  2.24609 100.80000  9F
0.134515 DDAA  01  2.24609 101.70000  A0
............
我只想要第一列,第四列,第五列。
也就是0.129515    2.24609    94.50000 这3列数,
怎样导入matlab啊?

 

假设数据在data.txt里,且位于当面matlab路径里,用下面这句就可以了
[col1,col2,col3]=textread(\'data.txt\',\'%f %*s %*d %f %f %*s\',-1);


————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

matlab文件读取总结

matlab的文件读取函数功能可以读取各种文件类型,包括

textread(字母和数值每行格式一致) 
xlsread(读取excel文件) 
importdata(字母和数值分开,以数字为主,字母只存在前几行) 
load(纯数据) 
dlmread(单一分隔符的纯数据或ASCII数据文件) 
textscan(类似于textread,但使用前必须fopen打开文件) 
csvread(类似于xlsread,读取.csv格式的文件) 
fscanf(读取已知文件格式的文本文件)

以上所有的文件读取函数基本可以涵盖我们遇到的所有数据文件类型,具体用法建议参考matlab的帮助文档,其中拿出部分用法进行说明。 
1.textread:

[column1,column2,...] = textread(\'filename\',\'%s %d ...\',\'headlines\',number,\'delimiter\',\',\',\'emptyvalue\',NAN);
  • 1

注释:delimiter定义分隔符的类型,空字符采用NAN代替。headline定义了开始读取的行数。 如果发现某一列的字符类型不同,如point1,30可以采用

[column1,column2,...] = textread(\'filename\',\'point%d%d...\',\'headlines\',number,\'delimiter\',\',\',\'emptyvalue\',NAN);
  • 1

的格式,就会忽略第一个字段中的字符类型。 
还有一个比较有意思的用法涉及到正则表达式的使用。例如: 
如果只想读第一列,其余的跳过

filename = \'.\myfile.txt\';
[names]=textread(filename,\'%s%*[^\n]\')

 %[^...] - reads characters not matching characters between the brackets until first matching character  
%[^\n] 就是一直读到行尾。
%*[^\n] 就是从当前直接跳到行尾。 
可对比
[names,rest]=textread(filename,\'%s%[^\n]\') 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

最为详细的textread的用法一参考以下链接 
http://blog.sciencenet.cn/blog-512529-934914.html 
2.importdata:

A = importdata(filename, delimiter, nheaderlines);
  • 1

其中,delimiter是指分隔符,nheaderlines是指开始读取的行数。importdata用法比较简单,适合读取数值与文本分开且分布较集中的文件类型。具体使用也可以参考http://blog.csdn.net/shanchuan2012/article/details/51907373 
3.xlsread

A = xlsread(\'data.xlsx\',\'Sheet1\');
  • 1

用法较为简单不过多赘述。load,csvread类似。dlmread的用法也较为简单

A=dlmread(\'lcode.dat\',\'delimeter\')
  • 1
  1. textscan 
    使用textscan之前必须要先fopen文件,基本使用示例为
fid = fopen(\'filename.txt\');
C = textscan(fid, \' \%f\; \%f\', \'delimiter\', \',\',\'EmptyValue\', -Inf);
fclose(fid);
  • 1
  • 2
  • 3

用法与textread极为类似,fscanf也都类似,具体用法及示例见下文 
http://blog.sina.com.cn/s/blog_9e67285801010buf.html

matlab对文件中混乱的文本格式读取操作总结

对于本文字符数字较为混乱的文本进行文本操作需要对文件内部进行操作,包括文本位置指针,文件逐行读取,字符匹配等等复杂操作。主要用到的几个函数有

feek(设置指针位置) 
ftell(获得指针位置) 
frewind(重设指针到文件起始位置) 
feof(测试指针是否在文件结束位置)

具体用法: 
fseek(fid,-1,’eof’),指针到末尾 
fseek(fid,2,’bof’),起始位置后第二个字符位置 
ftell(fid);找到指针位置 
frewind(fid),指针回到起始 
feof(fid)判断指针是否在末尾

最详细的指导资料建议参考matlab的help文档。 
参考文献: 
1. http://blog.csdn.net/holybin/article/details/44199909 
2. https://wenku.baidu.com/view/b3268f154431b90d6c85c745.html 
3. http://blog.csdn.net/zm1_1zm/article/details/53341106


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi10.4.1在android平台下建立文件无权限发布时间:2022-07-18
下一篇:
Delphi - Indy TIdMessage和TIdSMTP实现邮件的发送发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap