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来进行操作文本文件是不是很简单啊。