matlab读文件函数程序,Matlab 文件读写函数

MATLAB中的文件

m文件:

命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。包含matlab语言代码的文件称为m文件,其扩展名为m。

用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件

编辑m文件可使用各种文本编辑器,matlab有内建的m文件编辑器,调用格式是:窗口菜单【File】-【New】-【M-File】。

已经编写好的M文件,也可以使用窗口菜单【File】-【Open M-file...】来打开、编辑、调试。

MAT文件

1 数据基本操作本节介绍基本的数据操作,包括工作区的保存、导入和文件打开。1.1 文件的存储MATLAB支持工作区的保存。用户可以将工作区或工作区中的变量以文件的形式保存,以备在需要时再次导入。保存工作区可以通过菜单进行,也可以通过命令窗口进行。1. 保存整个工作区选择File菜单中的Save Workspace As…命令,或者单击工作区浏览器工具栏中的Save,可以将工作区中的变量保存为MAT文件。2. 保存工作区中的变量在工作区浏览器中,右击需要保存的变量名,选择Save As…,将该变量保存为MAT文件。3. 利用save命令保存该命令可以保存工作区,或工作区中任何指定文件。该命令的调用格式如下:● save:将工作区中的所有变量保存在当前工作区中的文件中,文件名为 matlab.mat,MAT文件可以通过load函数再次导入工作区,MAT函数可以被不同的机器导入,甚至可以通过其他的程序调用。● save('filename'):将工作区中的所有变量保存为文件,文件名由filename指定。如果filename中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径。● save('filename', 'var1', 'var2', ...):保存指定的变量在 filename 指定的文件中。● save('filename', '-struct', 's'):保存结构体s中全部域作为单独的变量。● save('filename', '-struct', 's', 'f1', 'f2', ...):保存结构体s中的指定变量。● save('-regexp', expr1, expr2, ...):通过正则表达式指定待保存的变量需满足的条件。● save('..., 'format'),指定保存文件的格式,格式可以为MAT文件、ASCII文件等。

1.2 数据导入MATLAB中导入数据通常由函数load实现,该函数的用法如下:● load:如果matlab.mat文件存在,导入matlab.mat中的所有变量,如果不存在,则返回error。● load filename:将filename中的全部变量导入到工作区中。● load filename X Y Z ...:将filename中的变量X、Y、Z等导入到工作区中,如果是MAT文件,在指定变量时可以使用通配符“*”。● load filename -regexp expr1 expr2 ...:通过正则表达式指定需要导入的变量。● load -ascii filename:无论输入文件名是否包含有扩展名,将其以ASCII格式导入;如果指定的文件不是数字文本,则返回error。● load -mat filename:无论输入文件名是否包含有扩展名,将其以mat格式导入;如果指定的文件不是MAT文件,则返回error。例1 将文件matlab.map中的变量导入到工作区中。首先应用命令whos –file查看该文件中的内容:>> whos -file matlab.matName Size Bytes ClassA 2x3 48 double arrayI_q 415x552x3 687240 uint8 arrayans 1x3 24 double arraynum_of_cluster 1x1 8 double arrayGrand total is 687250 elements using 687320 bytes将该文件中的变量导入到工作区中:>> load matlab.mat该命令执行后,可以在工作区浏览器中看见这些变量,如图1所示。图1 导入变量后的工作区视图接下来用户可以访问这些变量。>> num_of_clusternum_of_cluster =3

MATLAB中,另一个导入数据的常用函数为importdata,该函数的用法如下:

● importdata('filename'),将filename中的数据导入到工作区中;● A = importdata('filename'),将filename中的数据导入到工作区中,并保存为变量A;● importdata('filename','delimiter'),将filename中的数据导入到工作区中,以delimiter指定的符号作为分隔符;例2 从文件中导入数据。>> imported_data = importdata('matlab.mat')imported_data =ans: [1.1813 1.0928 1.6534]A: [2x3 double]I_q: [415x552x3 uint8]num_of_cluster: 3与load函数不同,importdata将文件中的数据以结构体的方式导入到工作区中。

1.3 文件的打开MATLAB中可以使用open命令打开各种格式的文件,MATLAB自动根据文件的扩展名选择相应的编辑器。需要注意的是open('filename.mat')和load('filename.mat')的不同,前者将filename.mat以结构体的方式打开在工作区中,后者将文件中的变量导入到工作区中,如果需要访问其中的内容,需要以不同的格式进行。例3 open与load的比较。>> clear>> A = magic(3);>> B = rand(3);>> saveSaving to: matlab.mat>> clear>> load('matlab.mat')>> AA =8 1 63 5 74 9 2>> BB =0.9501 0.4860 0.45650.2311 0.8913 0.01850.6068 0.7621 0.8214>> clear>> open('matlab.mat')ans =A: [3x3 double]B: [3x3 double]>> struc1=ans;>> struc1.Aans =8 1 63 5 74 9 2>> struc1.Bans =0.9501 0.4860 0.45650.2311 0.8913 0.01850.6068 0.7621 0.8214

文件操作函数

一、fopen函数

matlab中fopen函数在指定文件打开的实例如下:

*1)“fopen”打开文件,赋予文件代号。

语法1:fid= fopen(filename,permission)

用指定的方式打开文件

fid=+N(N是正整数):表示文件打开成功,文件代号是N.

fid=-1 : 表示文件打开不成功。

fid在此次文件关闭前总是有效的。

如果以读方式打开,matlab首先搜索工作目录,其次搜索matlab的其他目录,“permission”是打开方式参数。

打开方式参数由以下字符串确定:

r 读出

w 写入(文件若不存在,自动创建)

a 后续写入(文件若不存在,自动创建)

r+ 读出和写入(文件应已存在)

w+ 重新刷新写入,(文件若不存在,自动创建)

a+ 后续写入(文件若不存在,自动创建))

w 重新写入,但不自动刷新

a 后续写入,但不自动刷新

文件的存储格式:文件打开的默认方式是:二进制。以文本方式打开,可以在方式参

数“permission”中加入“t”文件将,如“rt”,“wt+”

使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式意义

"r"打开一个用于读取的文本文件

"w"创建一个用于写入的文本文件

"a"附加到一个文本文件

"rb"打开一个用于读取的二进制文件

"wb"创建一个用于写入的二进制文件

"ab"附加到一个二进制文件

"r+"打开一个用于读/写的文本文件

"w+"创建一个用于读/写的文本文件

"a+"打开一个用于读/写的文本文件

“rt”只读打开一个文本文件,只允许读数据

“wt”只写打开或建立一个文本文件,只允许写数据

“at”追加打开一个文本文件,并在文件末尾写数据

“rb”只读打开一个二进制文件,只允许读数据

“wb”只写打开或建立一个二进制文件,只允许写数据

“ab”追加打开一个二进制文件,并在文件末尾写数据

“rt+”读写打开一个文本文件,允许读和写

“wt+”读写打开或建立一个文本文件,允许读写

“at+”读写打开一个文本文件,允许读,或在文件末追加数据

“rb+”读写打开一个二进制文件,允许读和写

“wb+”读写打开或建立一个二进制文件,允许读和写

“ab+”读写打开一个二进制文件,允许读,或在文件末追加数据

对于文件使用方式有以下几点说明:

1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

r(read): 读

w(write): 写

a(append): 追加

t(text): 文本文件,可省略不写

b(binary): 二进制文件

+: 读和写

2) 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

3) 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

4) 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。

5) 在打开一个文件时,如果出错,fopen将返回一个值-1。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:

6) if((fp=fopen("c:\\hzk16","rb"))=-1)

{

printf("\nerror on open c:\\hzk16 file!");

getch();

exit(1);

}

这段程序的意义是,如果返回的值为-1,表示不能打开C盘根目录下的hzk16文件,则给出提示信息“error on open c:\ hzk16 file!”,下一行getch()的功能是从键盘输入一个字符,但不在屏幕上显示。在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行,因此用户可利用这个等待时间阅读出错提示。敲键后执行exit(1)退出程序。

7) 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。

8) 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开的,可直接使用。

注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上!

二、fprintf函数

matlab中fprintf函数的具体使用方法实例如下:

fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:

数据的格式化输出:fprintf(fid, format, variables)

按指定的格式将变量的值输出到屏幕或指定文件

fid为文件句柄,若缺省,则输出到屏幕

1 for standard output (the screen) or 2 for standard error. If FID is omitted, output goes to the screen.

format用来指定数据输出时采用的格式

%d 整数

%e 实数:科学计算法形式

%f 实数:小数形式

%g 由系统自动选取上述两种格式之一

%s 输出字符串

fprintf(fid,format,A)

说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。

例子:

创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。

>> a='string';

>> fid=fopen('d:\char1.txt','w');

>> fprintf(fid,'%s',a);

>> fclose(fid);

>> fid1=fopen('d:\char1.txt','rt');

>> fid1=fopen('d:\char1.txt','rt');

>> b=fscanf(fid1,'%s')

b =

string

matlab读txt文件

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

%得到文件号

[f,count]=fscanf(fid,'%f %f',[12,90]);

%把文件号1的数据读到f中。其中f是[12 90]的矩阵

%这里'%f %f'表示读取数据的形势,他是按原始数据型读出

fclose(fid);

%关闭文件

另外有的txt文件还可以用load来打开

其语句为

f=load('fx.txt)

三、fscanf函数

从文件中有格式地读数据 fscanf

语法1:[a,count]=fscanf(fid,format,size)

根据指定的格式从fid 文件按照格式format读出数据并按size的格式放入内存。

a :读出的数据放入内存的变量名

count :返回值n。n=0:失败、n>0:成功,n是读出数据个数。

fid :文件号,为fopen打开文件的返回值。

size :a的数据的维度,是一个[m n]的向量,m为行,n为列(注意,这里读取的顺序是按行读取,存储的时候是按列存储),若n取inf表示读到文件末尾。具体含义如下:

N : 列向量

inf : 读出文件全部数据

[M,N] : 读出数据以M*N的格式放入变量名a内

format :读出数据的格式,format是字符形式,与C语言基本相同。字符形式由“%”与字符集(d,i,o,u,x,e,f,g,s,c,…)搭配构成,%是format参数的起始符号,不可缺少。

fscanf()的format参数允许的格式为:

'%[*][width][modifiers]type’

[]中的内容根据需要供选,可缺省,%type必须要有,不可省。

%[modifiers]type:表一种类型转换符,如%hd表示short int类型转换符。它是format的核心。转换符的作用是将“数据”转换为转换符代表的数据类型,这里提到的数据必须能够转换为转换符代表的数据类型,fscanf读取数据时也只匹配这样的数据。

如fid指向一文件,其中只包含数据[123 [空格] 456],用“m=fscanf(fid, “%d”, n);”语句是将123这个数据转换为转换符”%d”所代表的数据类型即整型后保存到m中去。

%*[modifiers]type:表示跳过stream流中能够被转换为[modifiers]type所代表数据类型的数据不读,如在以上的文件中,用“m=fscanf(fid, “%*d%d”, n);”就可以跳过对123的读取,而将456转换为整型后保存到m中。

%*m[modifiers]type:表跳过stream流中能够被转换为[modifiers]type所代表数据类型的m个“字符”不读。如“m=fscanf(fid,“%*1d%d”, n);”是将23转换为整型后保存到m地址中去。

%width[modifiers]type:表示从stream流中读取width长度的“字符”来转换为[modifiers]type对应数据类型的数据。如“m=fscanf(pF, “%1d”, n);”是将1转换为整型后保存到m地址中去。

如:  %s:单字符读

%c:读space字符

例:s=fscanf(fid,'%s') 返回一个字符。

a=fscanf(fid,']') 返回一个五位十进制整数。

举个小例子:

内容:     13,1,3.4

3,2.1,23

1,12,2

4,5.4,6

现在为了读取001中的数据存在一个数组里,可以用如下方法

fid=fopen('001.txt');

data=fscanf(fid,'%f,%f,%f',[3,inf]) ;%这里得用单引号

fclose(fid);

这时data中的数据如下:

13    3     1     4

1     2.1   12    5.4

3.4   23    2     6

一、用matlab将二维数组写入txt文件

1.比方说 矩阵A 为A=[1 2 3;4 5 6];

那么程序 为

fid=fopen('A1.txt','w');

[b1 b2]=size(A);

for i=1:b1

for j=1:b2

fprintf(fid,'%d\n',A(i,j));

end

fprintf(fid,'\n');

end

fclose(fid);

这个方法,得到是一个列向量。

2.使用fopen命令

fid=fopen('result.txt','wt');  %打开文件

fprintf(fid,'%s','前向速度        横向速度        垂向速度       横倾角速度      纵倾角速度      偏航角速度');

fprintf(fid,'%s','       前向位置       横向位置       垂向位置        横倾角        纵倾角        偏航角');

fprintf(fid,'\n');

n

for i=1:m

fprintf(fid,'%f        ');

for j=1:12

fprintf(fid,'%3.6f       ',output(i,j));  %output(i,j)是输入数据

end

fprintf(fid,'\n');

end

fclose(fid); %关闭文件

2. Matlab读写excel文件函数

Matlab读写excel文件函数:xlsread合xlswrite(转载)

在实验编程中产生了需要将matlab运行的试验结果写入 excel,从excel中读数据的要求,这样就需要用到matlab操作excel表格的相关函数:xlsfinfo,xlsread合 xlswrite。

应用实例:

对如下文件数据处理转化:test.txt[code]

================25-Jul-2008 10:07:25 ===============

jink2005stop

H R S

T H R

S C H

R S M

H R S

N H R

S Q H

R S D

jink2005start

GGGY

-108. 172.

GGGT

-64. 132.

GGGE

-73. -149.

GGGH

58. -43.

GGAG

0. 0.

GGAP

0. 0.

GGAT

0. 0.

GGAM

-89. -4.

GGAN

66. 28.

jink2005stop

[/code]转存到test.xls的程序:[code]

function countResult(filename xlsfile)

% 读娶CSAResult.txt文件,统计到Excel表格中

% xlsRow为本文件写到excel文件excelResult.xls的起始行

fid = fopen(filename);

% Excel = actxserver('Excel.Application');

fRow = 0;

sheet = 1;

xlsRow = 1;

% 找出要用数据的第一行(jink2005start下面)

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

while feof(fid) == 0 & length(matches) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

end

seq = 'xxxx';

while feof(fid) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005stop');

if length(matches) > 0 %找到停止行标识,则开始再次寻找下面start处

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

while feof(fid) == 0 & length(matches) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

end

elseif length(tline) == 4

seq = tline;

elseif length(tline) ~= 0

% 开始将angle、seq写入excel表格

[token rem] = strtok(tline); %使用默认的空格分割字符串,第一个空格前在token里,剩下在rem里

M(1 1) =;

M(1 2) =;

M(1 3) =;

if xlsRow >

sheet = sheet + 1;

xlsRow = 1;

end

xlswrite(xlsfile M strcat('Sheet' num2str(sheet)) strcat('A' num2str(xlsRow)));

xlsRow = xlsRow + 1;

end

end

fclose(fid);

[/code]

运行方式如下:

[code]countResult('test.txt' 'test.xls'); [/code]

结果text.xls中的结果如下:

-108. 172. GGGY

-64. 132. GGGT

-73. -149. GGGE

58. -43. GGGH

0 0 GGAG

0 0 GGAP

0 0 GGAT

-89. -4. GGAM

66. 28. GGAN

参考文献:

matlab帮助文档

[url=Excel表格中[/color][/b][/url] [url=

jink2005 发表于 2008-8-10 12:50

程序改进:减少打开关闭excel次数,增加excel最大行限制处理

[code]

function countResult(filename xlsfile)

% 读娶CSAResult.txt文件,统计到Excel表格中

% xlsRow为本文件写到excel文件excelResult.xls的起始行

fid = fopen(filename);

% Excel = actxserver('Excel.Application');

sheet = 1;

xlsRow = 1;

% 找出要用数据的第一行(jink2005start下面)

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

while feof(fid) == 0 & length(matches) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

end

seq = 'xxxx';

mRow = 0;

while feof(fid) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005stop');

if length(matches) > 0 %找到停止行标识,则开始再次寻找下面start处

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

while feof(fid) == 0 & length(matches) == 0

tline = strtrim(fgetl(fid));

matches = findstr(tline 'jink2005start');

end

elseif length(tline) == 4

seq = tline;

elseif length(tline) ~= 0

% 开始将angle、seq写入excel表格

[token rem] = strtok(tline); %使用默认的空格分割字符串,第一个空格前在token里,剩下在rem里

mRow = mRow + 1;

M(mRow 1) =;

M(mRow 2) =;

M(mRow 3) =;

% 每次M到达500行才写入excel减少开关excel操作

if mRow >= 500

if (xlsRow + 500) >

sheet = sheet + 1;

xlsRow = 1;

end

xlswrite(xlsfile M strcat('Sheet' num2str(sheet)) strcat('A' num2str(xlsRow)));

mRow = 0;

xlsRow = xlsRow + 500;

M = {};

end

end

end

% 文件读写结束M可能不足500行,将剩余M写入excel

xlswrite(xlsfile M strcat('Sheet' num2str(sheet)) strcat('A' num2str(xlsRow)));

fclose(fid);

return

[/code]

jink2005 发表于 2008-8-14 15:23

我遇到过的问题

>> countResult('CSAResult.txt');

Error using ==> xlswrite

Error: object returned error code: 0x800A03EC

Error in ==> countResult at 38

xlswrite('excelResult.xls' M strcat('A' num2str(xlsRow)));

——Matlab7.0中堤供的可以省略工作表参数的使用方法,好像不对,我省略后,它将后面的表格range作为表明来使用。工作表参数可能不能省略。

>> countResult('CSAResult.txt' 1);

Invoke Error Dispatch Exception:

Source: Microsoft Office Excel

Description: “excelResult.xls”为只读。要保存当前工作簿衬副本,请单击“确定”按钮,在“另存为”对话框中为副本指定一个名称。

Help File: D:Program FilesMicrosoft OfficeOFFICExlmain11.chm

Help Context ID: 0

Error in ==> countResult at 38

xlswrite('excelResult.xls' M 'Sheet1' strcat('A' num2str(xlsRow)));

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

(0)自己添加

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

(1)Load

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

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

例:

data.txt文件(ASCII格式)

0 1

1 2 3

0

使用“load data.txt”将会出错。

data1.txt文件

0 1 2

1 2 3

2 3 4

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

(2)importdata

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

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

例 test.txt

This is a test.

Start

0 1 2

1 2

1 2 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

0 1 2

1 2

1 2 3 4

End.

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

结果:

A =

0 1 2

1 2 NaN

1 2 3

4 NaN NaN

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

(3)fopen

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

例:读取字符串的方法

data.txt

0 1 2

1 2 3

1 2 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 =

0 1 2

1 2 3

1 2 3

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

0 1 2

1 2

1 2 3

End.

结果C=[]

例:读取行的方法

fid1=fopen('data.txt');

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

while ~feof(fid1)

aline=fgetl(fid1);

if double(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.1 0.1 151.031 -12.3144 -29.0245 3.11285

0.1 0.2 120.232 -2.53284 -8.40095 3.3348

0.1 0.3 136.481 -0.33173 -22.4462 3.598

0.1 0.4 184.16 -18.2706 -54.0658 2.51696

0.1 0.5 140.445 -6.99704 -21.2255 2.4202

0.1 0.6 127.981 0.319132 -29.8315 3.11317

0.1 0.7 106.174 -0.398859 -39.5156 3.97438

0.1 0.8 105.867 -20.1589 -13.4927 11.6488

0.1 0.9 117.294 -11.8907 -25.5828 4.97191

0.1 1 79.457 -1.42722 -140.482 0.726493

0.1 1.1 94.2203 -2.31433 -11.9207 4.71119

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

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

best_data=[];

while 1

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

所以,用MATLAB来进行操作文本文件是不是很简单啊。

你可能感兴趣的:(matlab读文件函数程序)