转 matlab的各种数据读取(txt,dat,mat等格式)文件打开关闭
- 格式:pdf
- 大小:621.99 KB
- 文档页数:12
Matlab 的数据文件I/ O 的实现方法0 引言Matlab 是一个功能强大的计算机辅助设计软件,被称为“草稿纸式的科学计算语言”,它具有强大的符号、数值计算、矩阵运算以及图形显示的功能,它被广泛地应用在数字信号处理、自动控制、图像处理、神经网络、优化设计、模糊逻辑、仿真、小波分析等方面。
Matlab 应用中常需要实现Matlab 与其他应用程序的数据共享,即需将数据文件读入Matlab 进行有效的数据处理,然后将Matlab 处理好的数据保存为数据文件,以便其他应用程序所使用。
Matlab 支持多种文件格式的输入和输出,如.dat 、.txt 、.mat 、.bmp 等。
在实际进行数据文件的I/ O 时常出现错误,本文详细讨论Matlab 中数据文件I/ O 的实现方法,并给出每种方法的具体实例。
所有的数据文件I/ O 操作文件都在Matlab 中,无需安装专门的工具箱。
数据文件I/ O 程序可分为两种基本类型:低级和高级。
高级包括一些专门的函数以支持特定格式的读和写,相对而言低级则比较灵活。
1 高级数据文件I/ O 方式命令高级数据文件I/ O 命令主要有Load 和Save 。
Save 可以将Matlab 变量以ASCII 码格式或MAT存储, Load 可以读ASCII 码格式的变量或MAT 文件到Mat2lab 工作区。
这两条命令的使用比较简单, (为便于读者可直接将以下文本输入计算机运行,注释采用英文) 如:%This file demonstrates the behavior of LOAD and SAVEclear all%Clear all variablesx = 5 ;x2 = 10 ; %Create x and x2whos %To ,display the variables in workspacepause %Pause so as to observesave xdata x%Save only x into xdata. matclear all%Clear all variablesload xdata%Load xdata. matwhos %Note that x is backpausex2 = 10 ; %Recreate x2whospausesave xdata x x2%Now save using a wild cardclear all%Clear all variablesload xdata%Load xdata. matwhos使用Load 和Save 还可以实现一次读多个文件或将数据存入多个文件,以Save 命令为例(Load 类似) ,程序如下:a = rand(6) ; %make a (6 3 6) random numberfilename = ['a1.txt';'a2.txt';'a3.txt';'a4.txt';'a5.txt';'a6.txt'; ] ; %list your file namesfor i=i:1ength(a)temp = a(:,i) ;save (filename (i , :) ,'temp''-ascii') ;%save to the specified fileenddlmread 和teatread 函数可以实现读入格式化的ASCII 码数据而不使用低级命令。
1.1 文件的打开和关闭1.1.1 文件的打开fopen ('filename', 'mode')mode格式有:‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。
该文件必须已存在。
‘w’:打开后写入数据。
该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
‘a’:在打开的文件末端添加数据。
文件不存在则创建。
‘a+’:打开文件后,先读入数据再添加数据。
文件不存在则创建。
如果rt表示该文件以文本方式打开,如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
Fopen函数两个返回值:1、一个是返回一个文件标识(file Identifier),它会作为参数被传入其他对文件进行读写操作的命令,通常是一个非负的整数,可用此标识来对此文件进行各种处理。
(如果返回的文件标识是–1,则代表fopen无法打开文件,其原因可能是文件不存在,或是用户无法打开此文件权限);2、另一个返回值就是message,用于返回无法打开文件的原因;例:1-1[f,message]=fopen('fileexam1', 'r')if f==-1disp(message); %显示错误信息end(若文件fileexam1不存在,则显示如下信息。
Cannot open file.existence?permissions?memory?)例:1-2[f,message]=fopen('fileexam2', 'r');if f==-1disp (message); %显示错误信息elsedisp(f);end若文件fileexam2存在,则返回f值。
1.1.2文件的关闭Fclose(f)F为打开文件的标志,若若fclose函数返回值为0,则表示成功关闭f标志的文件;若返回值为–1,则表示无法成功关闭该文件。
matlab读取文本文件的几种方法在MATLAB中,有多种方法可以读取文本文件。
以下是其中几种常用的方法:1. `fscanf`:这个函数可以读取符合特定格式的文本文件。
例如,如果文本文件中的每一行都是一个浮点数,可以使用以下代码读取文件:```matlabfileID = fopen('','r'); % 打开文件data = fscanf(fileID,'%f\n'); % 读取数据fclose(fileID); % 关闭文件```2. `textscan`:这个函数可以读取任意格式的文本文件,并返回一个单元数组,其中的每个单元包含一行数据。
例如:```matlabfileID = fopen('','r'); % 打开文件data = textscan(fileID, '%f'); % 读取数据fclose(fileID); % 关闭文件```3. `readmatrix`:这个函数可以读取包含数字的文本文件,并将其作为矩阵返回。
例如:```matlabdata = readmatrix(''); % 读取数据```4. `readtable`:这个函数可以读取包含表格数据的文本文件,并将其作为表格返回。
例如:```matlabdata = readtable(''); % 读取数据```以上方法都是基于文本文件的,如果需要读取的是CSV文件,可以使用MATLAB内置的`readtable`或`readmatrix`函数。
例如:```matlabdata = readtable(''); % 读取CSV文件作为表格```或者:```matlabdata = readmatrix(''); % 读取CSV文件作为矩阵```。
matlab文件操作及读txt文件matlab文件操作文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。
MATLAB提供了一系列低层输入输出函数,专门用于文件操作。
1、文件的打开与关闭1)打开文件在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。
fopen函数的调用格式为:fid=fopen(文件名,‘打开方式’)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式如下:λ‘r’:只读方式打开文件(默认的方式),该文件必须已存在。
‘r+’:读写方式打开文件,打开后先读后写。
该文件必须已存在。
λλ‘w’:打开后写入数据。
该文件已存在则更新;不存在则创建。
‘w+’:读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
λλ‘a’:在打开的文件末端添加数据。
文件不存在则创建。
λ‘a+’:打开文件后,先读入数据再添加数据。
文件不存在则创建。
另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。
2)关闭文件文件在进行完读、写等操作后,应及时关闭,以免数据丢失。
关闭文件用fclose函数,调用格式为:sta=fclose(fid)说明:该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
如果要关闭所有已打开的文件用fclose(‘all’)。
2、二进制文件的读写操作1)写二进制文件fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。
其调用格式为:COUNT=fwrite(fid,A,precision)说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。
一、纯数据文件(没有字母和中文,纯数字)对于这种txt文档,从matalb中读取就简单多了例如test.txt文件,内容为“17.901 -1.1111 33.04517.891 -1.1286 33.04517.884 -1.1345 33.045”可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt“你好欢迎来到振动论坛1 11 111 11112 22 222 22223 33 333 33334 44 444 44445 55 555 5555”这样的文件怎么读入数据呢?方法有多种,现举两个比较简单实用的。
方法一:file/import data....../next/finish>> whosName Size Bytes Classdata 5x4 160 double arraytextdata 4x1 300 cell arrayGrand total is 54 elements using 460 bytes>> data1 11 111 11112 22 222 22223 33 333 33334 44 444 44445 55 555 5555>> textdatatextdata ='你好''欢迎来到''振动论坛'''方法二:[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f 等。
Matlab⽂件读取总结matlab的⽂件读取函数功能可以读取各种⽂件类型,如⽂本⽂件和⼆进制⽂件,如下表所⽰:函数功能(⽂件要求)textscan从⽂本⽂件或字符串读取格式化数据(⼀⾏中有整数,浮点数,字符串等)(读取已打开⽂件)xlsread读取Excel⽂件importdata从⽂件加载数据load将⽂件变量加载到⼯作区(常见的MAT⽂件,也可以是⽂本⽂件,如txt,dat等)dlmread将 ASCII 分隔的数值数据⽂件读取到矩阵(读取⽂本⽂件)textread同textread(不推荐⽤textread,改⽤textscan)csvread读取逗号分隔值 (CSV) ⽂件,读取已打开⽂件fscanf读取⽂本⽂件中的数据,读取已打开⽂件textscan⽤法:C = textscan(fileID,formatSpec)C = textscan(fileID,formatSpec,N) %按formatSpec读取⽂件数据N次,指定'headerlines'跳过指定⾏数举例:test.txtdaa fsds sds sdv1 3.4 5.6 7.82 4.5 6.7 3.43 4.5 5.6 3.5fileID = fopen(test.txt);C = textscan(fileID,'%d %f %f %f','headerlines',1); % %d有符号整数 %f双精度浮点数 %s读取以空⽩或分隔符分隔的⽂本fclose(fileID);得到的C是⼀个cell类型的数据。
textscan与textread的区别:1. textread不⽤先fopen那个⽂件,适⽤于格式统⼀的txt⽂件的⼀次性⼤批量读取。
⽽使⽤textscan函数之前需要先⽤fopen函数打开要读取的⽂件并返回句柄fid。
2. 其次textread读取某个⽂件后,下次再⽤textread读取这个⽂件时,还是会从⽂件头开始读取。
Matlab文件操作及读txt文件(fopen,fseek,fread,fclose) matlab文件操作文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。
MATLAB提供了一系列低层输入输出函数,专门用于文件操作。
1、文件的打开与关闭1)打开文件在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。
fopen函数的调用格式为:fid=fopen(文件名,…打开方式‟)说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。
文件名用字符串形式,表示待打开的数据文件。
常见的打开方式如下:λ…r‟:只读方式打开文件(默认的方式),该文件必须已存在。
…r+‟:读写方式打开文件,打开后先读后写。
该文件必须已存在。
λλ…w‟:打开后写入数据。
该文件已存在则更新;不存在则创建。
…w+‟:读写方式打开文件。
先读后写。
该文件已存在则更新;不存在则创建。
λλ…a‟:在打开的文件末端添加数据。
文件不存在则创建。
…a+‟:打开文件后,先读入数据再添加数据。
文件不存在则创建。
另外,在这些字符串后添加一个“t”,如…rt‟或…wt+‟,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen 函数默认的打开方式。
2)关闭文件文件在进行完读、写等操作后,应及时关闭,以免数据丢失。
关闭文件用fclose函数,调用格式为:sta=fclose(fid)说明:该函数关闭fid所表示的文件。
sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。
如果要关闭所有已打开的文件用fclose(…all‟)。
2、二进制文件的读写操作1)写二进制文件fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。
其调用格式为:COUNT=fwrite(fid,A,precision)说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。
Matlab---读取.txt⽂件Matlab读取 .txt⽂件这⾥提供两种⽅法:1,load()函数。
2,importdata()函数。
-----------------------------------------------------------------------------⼀、对于load()函数。
例⼦,data_txt.txt内容如下:0 1.000000 1.000000 1.0000001 3.000000 4.000000 5.0000002 5.000000 7.000000 9.0000003 7.000000 10.00000 13.000004 9.000000 13.00000 17.000005 11.00000 16.00000 21.00000example_load_txt.m 内容如下:clear all;close all;clc%对于类似的txt⽂件,不含有字符,只有数字data=load('F:\F桌⾯⽂件\data_txt.txt');x=data(:,1);y1=data(:,2);y2=data(:,3);y3=data(:,4);plot(x,y1,'r--',x,y2,'bo',x,y3,'ks')-----------------------------------------------------------------------------⼆、对于importdata()函数。
例⼦,data_txt_string.txt内容如下:i co c1 c20 1.000000 1.000000 1.0000001 3.000000 4.000000 5.0000002 5.000000 7.000000 9.0000003 7.000000 10.00000 13.00000example_importdata_txt.m 内容如下:clear all;close all;clc%只是第⼀⾏有字符,则使⽤importdata可直接读取数据data1=importdata('F:\F桌⾯⽂件\data_txt_string.txt');data2=data1.data; %若没有这⼀步,出不出来图。
将matlab中数据输出保存为txt或dat格式总结网上各大论坛,主要有三种方法。
第一种方法:save(最简单基本的)具体的命令是:用save *.txt -ascii xx为变量*.txt为文件名,该文件存储于当前工作目录下,再打开就可以打开后,数据有可能是以指数形式保存的.例子:a =[17 24 1 8 15;23 5 7 14 16 ;4 6 13 20 22 ;10 12 19 21 3 ;11 18 25 2 9 ];save afile.txt -ascii aafile.txt打开之后,是这样的:1.7000000e+0012.4000000e+001 1.0000000e+000 8.0000000e+000 1.5000000e+0012.3000000e+001 5.0000000e+000 7.0000000e+000 1.4000000e+001 1.6000000e+0014.0000000e+000 6.0000000e+000 1.3000000e+001 2.0000000e+001 2.2000000e+0011.0000000e+001 1.2000000e+001 1.9000000e+0012.1000000e+0013.0000000e+0001.1000000e+001 1.8000000e+0012.5000000e+001 2.0000000e+000 9.0000000e+000第二种方法:dlmwritedlmwrite('a.txt',a,'precision','%10.0f')或者是dlmwrite('a.txt',a,'delimiter', '\t')对于只有一行或者一列的数据,很适用,但是多行的,就乱了网上有很多这一类似的问题,但是都不是很理想第三种方法:fopen+fprintf下面主要介绍这种方法,可以解决以上问题:用fprintf命令:以上面的例子为例:第一种情况:>> a=[17 24 1 8 15;23 5 7 14 16 ;4 6 13 20 22 ;10 12 19 21 3 ;11 18 25 2 9 ];>> fid = fopen('b.txt','wt');fprintf(fid,'%g\n',a); # \n 换行fclose(fid);然后用写字板打开b.txt,内容如下:为列向量17234101124561218171319258142021215162239第二种情况:对上面的命令做一下改动:# \n 换行改为\t,table键>> fid = fopen('b.txt','w');fprintf(fid,'%g\t',a);fclose(fid);然后用写字板打开b.txt,内容如下:为行向量:17 23 4 10 11 24 5 6 12 18 1 7 13 19 25 8 14 20 21 2 15 16 22 3 9 第三种情况:综合上面的两个结果,我们编写以下命令:<A style="key: ,'wt');%写入文件路径[m,n]=size(a);for i=1:1:mfor j=1:1:nif j==nfprintf(fid,'%g\n',a(i,j));elsefprintf(fid,'%g\t',a(i,j));endendendfclose(fid);然后用写字板打开b.txt,内容如下:矩阵17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9说明:以上操作都是在当前的工作目录下完成!下面给出最一般的模型,大家可以试着自己操作,如果需要dat格式,直接把txt换为dat就可以fid=fopen('C:\Documents and Settings\cleantotal.ped','wt');%写入文件路径matrix=input_mattrix %input_matrix为待输出矩阵[m,n]=size(matrix);for i=1:1:mfor j=1:1:nif j==nfprintf(fid,'%g\n',matrix(i,j));elsefprintf(fid,'%g\t',matrix(i,j));endendendfclose(fid);×××××××××××××××××××××××××××××××××××××××××××××××××××××××××下面附了具体的matlab的fopen和fprintf函数具体解释,当然help一下是可以知道的,只是为了方便大家matlab中fopen函数在指定文件打开的实例如下:*1)“fopen”打开文件,赋予文件代号。