打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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.mat
   Name                  Size              Bytes Class
   A                    2x3              48 double array
   I_q                 415x552x3            687240 uint8 array
   ans                1x3               24 double array
   num_of_cluster       1x1               8 double array
  Grand total is 687250 elements using 687320 bytes
  将该文件中的变量导入到工作区中:
  >> load matlab.mat
  该命令执行后,可以在工作区浏览器中看见这些变量,如图1所示。

图1 导入变量后的工作区视图
  接下来用户可以访问这些变量。
  >> num_of_cluster
  num_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);
  >> save
  Saving to: matlab.mat
  >> clear
  >> load('matlab.mat')
  >> A
  A =
               6
               7
               2
  >> B
  B =
      0.9501    0.4860    0.4565
      0.2311    0.8913    0.0185
      0.6068    0.7621    0.8214
  >> clear
  >> open('matlab.mat')
  ans =
      A: [3x3 double]
      B: [3x3 double]
  >> struc1=ans;
  >> struc1.A
  ans =
               6
               7
               2
  >> struc1.B
  ans =
      0.9501    0.4860    0.4565
      0.2311    0.8913    0.0185
      0.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 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来进行操作文本文件是不是很简单啊。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用文本文件
MATLAB、questasim、vivado数据处理
matlab的各种数据读取(txt,dat,mat等格式),文件打开关闭
Matlab文件和数据的导入与导出 - MATLAB 基础应用 - MATLAB|MATL...
matlab中如何读取TXT数据文件【转载】
转贴:matlab fprintf
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服