Matlab 读写入文件txt

Matlab有着强大的数据处理功能,经常需要从外部文件读取数据或将数据写到外部文件。Matlab和外部文件进行数据交换相关的命令,个人目前了解到的有以下几种。

 (0)自己添加

 

  你可以将txt的一些文本数据直接拷贝到matlab窗口,然后保存为mat文件,下次就可以直接采用load函数了。

 

 

(1)Load

load从Matlab的数据文件.mat中读取变量数据,也可以从.txt.dat等文件中读取数据。使用load命令读取数据以后在Matlab中数据变量和文件同名。例如使用“loaddata.txt”后数据变量名即为data。

需要注意的是文件格式的不同,文件格式分为二进制格式和ASCII格式两种。如果是二进制格式的文件,可以使用load命令直接读取。但如果是ASCII格式的文件,需要保证数据是整齐的(每一行数据个数要一致),否则会出错。

 

例:

data.txt文件(ASCII格式)

01

12 3

0

使用“loaddata.txt”将会出错。

 

data1.txt文件

01 2

12 3

23 4

使用“loaddata1.txt”能顺利读入3*3矩阵。

 

 

和load相对应的写数据命令为save,一般存为.mat文件,save保存的文件格式为二进制格式。

 

二进制和ASCII的区别

从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 

ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为: 

ASC码:00110101(5)   00110110(6)   00110111(7)00111000(8) 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。 

 

二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:0001011000101110 (十进制5678转换成二进制)只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。

 

(2)importdata

importdata根据文件名将数据导入到Matlab工作区。可以导入文件类型有很多,.txt.wav 等等。导入的数据(包括字符串和数值)以结构形式存放在工作区,可以使用whos命令来查看工作区的数据。

importdata可以导入load不能读取的长短不一的ASCII文件。当文件中既包含字符串又包含数值,而且数值长度个数不一时,可以使用importdata命令。注意读取的数值矩阵列数以文件中数值第一行的列数为标准。

 

例test.txt

Thisis a test.

Start

01 2

12

12 3 4

运行A=importdata('test.txt')

结果:

A=

        data: [4x3 double]

    textdata: {2x1 cell}

 

A.data=

     0    1     2

     1    2   NaN

     1    2     3

     4  NaN   NaN

 

A.textdata=

    'This is a test.'

    'Start'

 

另外,读取的字符串只能位于数值之前,位于数值之后的将被忽略。

 

例:test.txt

01 2

12

12 3 4

End.

运行A=importdata('test.txt')

结果:

A=

     0    1     2

     1    2   NaN

     1    2     3

     4  NaN   NaN

 

 

除了importdata命令以外,还可以从菜单选项file-->importdata...导入数据文件,效果和importdata命令一样。

 

(3)fopen

fopen打开一个文件并创建文件标识以供接下来的读写等操作。fopen命令本身不进行读操作。然后可以使用fscanf读取数据,根据需要对数据进行筛选编辑。

 

例:读取字符串的方法

data.txt

01 2

12 3

12 3

End.

 

fid=fopen('data.txt');    %打开文件,创建文件标识

A=fscanf(A,'%c');         %读取数据

fclose(fid);              %关闭文件标识

i=findstr(A,'End');       %查找标识

B=A(1:i-3);               %提取数据,换行为2个字符

C=str2num(B);             %将数据转换成数值矩阵

 

结果:

A=

01 2

 

12 3

 

12 3

 

注意其中str2num同样需要保证数值矩阵中列数一致,如果不一致,则结果为空。

 

01 2

12

12 3

End.

 

结果C=[]

 

 

例:读取行的方法

fid1=fopen('data.txt');

fid2=fopen('numbers.txt','w');

while~feof(fid1)

    aline=fgetl(fid1);

    ifdouble(aline(1))>=48&&double(aline(1))<=57

        fprintf(fid2,'%s\n',aline);

        continue

    end

end

fclose(fid1);

fclose(fid2);

 

numbers.txt即为按行保存的数值文件

 

还有另外的方法

在MATLAB中,来读取和写入文本文件是很简单的事。下面,就来简单介绍下。如果有其他问题,请留言。

一、读取文本文件

思路:

1、用fopen来打开一个文件句柄

2、用fgetl来获得文件中的一行,如果文件已经结束,fgetl会返回-1

3、用fclose来关闭文件句柄

比如,TIM_Grid_Data.txt的内容如下:

0.10.1 151.031 -12.3144 -29.0245 3.11285

0.10.2 120.232 -2.53284 -8.40095 3.3348

0.10.3 136.481 -0.33173 -22.4462 3.598

0.10.4 184.16 -18.2706 -54.0658 2.51696

0.10.5 140.445 -6.99704 -21.2255 2.4202

0.10.6 127.981 0.319132 -29.8315 3.11317

0.10.7 106.174 -0.398859 -39.5156 3.97438

0.10.8 105.867 -20.1589 -13.4927 11.6488

0.10.9 117.294 -11.8907 -25.5828 4.97191

0.11 79.457 -1.42722 -140.482 0.726493

0.11.1 94.2203 -2.31433 -11.9207 4.71119

那么可以用下面的代码来读取该文本文件:

fid=fopen('TIM_Grid_Data.txt','r');

best_data=[];

while1

    tline=fgetl(fid);

    if ~ischar(tline),break;end

    tline=str2num(tline);

    best_data=[best_data;tline];

end

fclose(fid);

这样文本文件中的内容就读入到了best_data中了。

二、写入文本文件

思路:

1、用fopen打开一个文件句柄,但要用“w+”“r+”等修饰符,具体参看help fopen

2、用fprintf写入数据

3、用fclose来关闭文件句柄

比如下面的程序:

fid=fopen('Data.txt','a+');

fprintf(fid,'Hello,Tim\r\n');

fprintf(fid,'http://blog.sina.com.cn/pengtim');

a=rand(1,10);

fprintf(fid,'%g\r\n',a);

fclose(fid);

打开Data.txt文件,可以看到:

Hello,Tim

http://blog.sina.com.cn/pengtim0.655741

0.0357117

0.849129

0.933993

0.678735

0.75774

0.743132

0.392227

0.655478

0.171187

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值