您的位置:首页 > 编程语言 > MATLAB

Matlab中如何读取TXT数据文件

2016-03-04 16:59 686 查看
下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。

function dataout=dataread( filein, fileout, line)

  fidin = fopen(filein,'r');

  fidout = fopen(fileout,'w');

  nline = 0;

  while ~feof(fidin) %判断是否为文件末尾

   tline = fgetl(fidin); %从文件读行

   nline = nline+1;

if nline == line

      fprintf(fidout,'%s\n',tline);

      dataout=tline;

    end

  end

  fclose(fidin);

  fclose(fidout);

调用格式:dataout=dataread(filein,fileout,line)

  如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据:

  a=textread('ll.txt');

  t=a(1:43, 4:10);

  1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行。

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

  

  转自:http://hi.baidu.com/youngbrave/blog/item/878db31fcd4f220f304e15bb.html

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

  对于这种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

  你好

  欢迎来到

  振动论坛

  vib.hit.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 =

     '你好'

     '欢迎来到'

    '振动论坛'

     'vib.hit.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

    vib.hit.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 % 判断首字符是否是数值

   % 如果是数字行,把此行数据写入文件MKMATLAB.txt  

   fprintf(fidout,'%s\n\n',tline);

else

   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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: