Matlab学习系列011 数据的读写导入及导出.docx

上传人:b****6 文档编号:6227574 上传时间:2023-01-04 格式:DOCX 页数:14 大小:115.20KB
下载 相关 举报
Matlab学习系列011 数据的读写导入及导出.docx_第1页
第1页 / 共14页
Matlab学习系列011 数据的读写导入及导出.docx_第2页
第2页 / 共14页
Matlab学习系列011 数据的读写导入及导出.docx_第3页
第3页 / 共14页
Matlab学习系列011 数据的读写导入及导出.docx_第4页
第4页 / 共14页
Matlab学习系列011 数据的读写导入及导出.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Matlab学习系列011 数据的读写导入及导出.docx

《Matlab学习系列011 数据的读写导入及导出.docx》由会员分享,可在线阅读,更多相关《Matlab学习系列011 数据的读写导入及导出.docx(14页珍藏版)》请在冰豆网上搜索。

Matlab学习系列011 数据的读写导入及导出.docx

Matlab学习系列011数据的读写导入及导出

011.数据的读写、导入及导出

在编写一个程序时,经常需要从外部导入数据,或者将程序运行的结果保存为文件。

一、*.txt或*.dat数据的导入与导出

1.load函数——数值数据(格式一致)导入

注:

load函数可以导入.mat文件,也可以导入变量Load(‘1.mat’,’y’)

例1.‘examp01.txt’文件如下:

1.6218e-0056.0198e-0054.5054e-0058.2582e-0051.0665e-0058.6869e-005

7.9428e-0052.6297e-0058.3821e-0065.3834e-0059.6190e-0058.4436e-006

3.1122e-0056.5408e-0052.2898e-0059.9613e-0054.6342e-0073.9978e-005

5.2853e-0056.8921e-0059.1334e-0057.8176e-0067.7491e-0052.5987e-005

1.6565e-0057.4815e-0051.5238e-0054.4268e-0058.1730e-0058.0007e-005

代码:

x1=load('examp01.txt');

%用load函数载入文件examp01.txt中的数据

x1=load('examp01.txt','-ascii');

%用-ascii选项强制以文本文件方式读取数据

load('examp01.txt');%载入数据给变量examp01

运行结果:

x1=1.0e-004*

0.16220.60200.45050.82580.10660.8687

0.79430.26300.08380.53830.96190.0844

0.31120.65410.22900.99610.00460.3998

0.52850.68920.91330.07820.77490.2599

0.16570.74810.15240.44270.81730.8001

例2.‘examp02.txt’文件如下:

9.55502.7027,8.6014;5.6154*3.4532

0.92230.9284,1.4644;3.6703*2.2134

5.55577.2288,4.3811;6.4703*4.7856

4.72719.9686,6.1993;9.6416*0.6866

代码:

x1=load('examp02.txt')

%用load函数载入文件examp02.txt中的数据

x1=load('examp02.txt','-ascii');

%用-ascii选项强制以文本文件方式读取数据

运行结果:

x=

9.55502.70278.60145.61543.4532

0.92230.92841.46443.67032.2134

5.55577.22884.38116.47034.7856

4.72719.96866.19939.64160.6866

2.dlmread函数——有统一分隔符的数值数据导入

语法:

M=dlmread(‘文件名’,‘分隔符’,‘读取范围’)

例3.(带标题行)‘examp03.txt’文件如下:

这是2行头文件,

你可以选择跳过,读取后面的数据。

1.096975,0.635914,4.045800,4.483729,3.658162,7.635046

6.278964,7.719804,9.328536,9.727409,1.920283,1.388742

6.962663,0.938200,5.254044,5.303442,8.611398,4.848533

代码:

x=dlmread('examp03.txt',',',2,0);

%调用dlmread函数读取文件examp02.txt中的数据,用逗号(',')作分隔符,设定读取的初始位置:

2行0列之后的数据

运行结果:

x=

1.09700.63594.04584.48373.65827.6350

6.27907.71989.32859.72741.92031.3887

6.96270.93825.25405.30348.61144.8485

例4.‘examp04.txt’文件如下:

1.455390+1.360686i,8.692922+5.797046i,5.498602+1.449548i,8.530311+6.220551i

3.509524+5.132495i,4.018080+0.759667i,2.399162+1.233189i,1.839078+2.399525i

4.172671+0.496544i,9.027161+9.447872i,4.908641+4.892526i,3.377194+9.000538i

代码:

x=dlmread('examp04.txt')

%调用dlmread函数读取的复数矩阵

运行结果:

x=

1.4554+1.3607i8.6929+5.7970i5.4986+1.4495i8.5303+6.2206i

3.5095+5.1325i4.0181+0.7597i2.3992+1.2332i1.8391+2.3995i

4.1727+0.4965i9.0272+9.4479i4.9086+4.8925i3.3772+9.0005i

例5.‘examp05.txt’文件如下:

1.7587447.2175804.7348601.527212

3.4112466.0738921.917453

7.3842682.428496

9.174243

代码:

x=dlmread('examp05.txt')

x1=load('examp05.txt')%由于列数不一致,会报错

运行结果:

x==

1.75877.21764.73491.5272

3.41126.07391.91750

7.38432.428500

9.1742000

3.dmlwrite函数——将矩阵数据写入指定分隔符的ASCII格式文件

语法:

dlmwrite(‘文件名’,‘数据’,‘分隔符’,‘起始行’,‘起始列’)

dlmwrite(‘文件名’,‘数据’,'-append')

'-append'——表示将矩阵数据写到文本末尾,若不指定将覆盖原文本数据。

例.(略)

4.importdata函数——导入带表头的txt或xls数据【将数据存入‘结构体’】

语法:

A=importdata(‘文件名’,‘分隔符’,‘n’);

N——表示n行表头

注:

也可以读入图片【x=importdata('tupian.jpg');image(x);】

例6.‘examp06.txt’文件如下:

Day1Day2Day3Day4Day5Day6Day7

95.0176.2161.5440.575.7920.281.53

23.1145.6579.1993.5535.2919.8774.68

60.681.8592.1891.6981.3260.3844.51

48.6082.1473.8241.030.9927.2293.18

89.1344.4717.6389.3613.8919.8846.60

代码:

x=importdata('examp14.txt','',1)

x.data

x.textdata

运行结果:

x=data:

[5x7double]

textdata:

{'Day1''Day2''Day3''Day4''Day5''Day6''Day7'}

colheaders:

{'Day1''Day2''Day3''Day4''Day5''Day6''Day7'}

ans=

95.010076.210061.540040.57005.790020.28001.5300

23.110045.650079.190093.550035.290019.870074.6800

60.68001.850092.180091.690081.320060.380044.5100

48.600082.140073.820041.03000.990027.220093.1800

89.130044.470017.630089.360013.890019.880046.6000

ans=

'Day1''Day2''Day3''Day4''Day5''Day6''Day7'

例7.‘examp07.xls’(Sheet1)文件如下:

代码:

x=importdata('examp07.xls')

x.data.Sheet1

x.textdata.Sheet1

运行结果:

x=data:

[1x1struct]

textdata:

[1x1struct]

ans=

1601016010101NaN06363

2601016010102NaN07373

3601016010103NaN000

4601016010104NaN08282

5601016010105NaN08080

ans=

'序号''班名''学号''姓名''平时成绩''期末成绩''总成绩''备注'

'''''''陈亮'''''''''

'''''''李旭'''''''''

'''''''刘鹏飞''''''''缺考'

'''''''任时迁'''''''''

'''''''苏宏宇'''''''''

5.textread与textscan函数——它们用法类似,导入混合格式文本

注意:

使用textscan之前,必须先用fopen打开要读入的文件。

语法:

C=textscan(fid,'format',N,'param',value);

fid——文件句柄;

format——读取格式;

N——用该格式读取N次数据;

'param',value——(可选)指定分隔符和值对

例8‘examp08.txt’文件如下:

(将数据存入元胞数组)

SallyLevel112.34451.23e10infNanYes5.1+3i

JoeLevel223.54609e19-inf0.001No2.2-.5i

BillLevel334.90122e510100No3.1+.1i

代码:

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

C=textscan(fid,'%s%s%f32%d8%u%f%f%s%f');

fclose(fid);

C{1}

C{9}

运行结果:

C{1}=

'Sally'

'Joe'

'Bill

C{9}=

5.1000+3.0000i

2.2000-0.5000i

3.1000+0.1000i

例9‘examp09.dat’文件如下(读入固定格式的文件的第一行,忽略其中的浮点值):

SallyLevel112.3445Yes

book.iLoveM

代码:

fid=fopen('examp09.dat','r');

[names,types,y,answer]=textread('examp09.dat',...

'%9c%6s%*f%2d%3s',1)

fclose(fid);

运行结果:

names=SallyLev

types='el1'

y=45

answer='Yes'

二、*.xls数据的导入与导出——xlsread函数

1.从*.xls导入数据

语法:

[num,txt,raw]=xlsread('文件名.xls','工作表','数据范围')

例10‘examp10.xls(Sheet1)’文件如下(导入Sheet1的A1至H4数据):

代码:

[num,txt,raw]=xlsread('examp02_14.xls','Sheet1','A1:

H4')

%数据返回num;文本返回txt;不处理直接作为元胞返回raw

运行结果:

num=

1601016010101NaN06363

2601016010102NaN07373

3601016010103NaN000

txt=

'序号''班名''学号''姓名''平时成绩''期末成绩''总成绩''备注'

'''''''陈亮'''''''''

'''''''李旭'''''''''

'''''''刘鹏飞''''''''缺考'

raw=

'序号''班名''学号''姓名''平时成绩''期末成绩''总成绩''备注'

[1][60101][6010101]'陈亮'[0][63][63][NaN]

[2][60101][6010102]'李旭'[0][73][73][NaN]

[3][60101][6010103]'刘鹏飞'[0][0][0]'缺考'

2.将数据导出到*.xls文件

语法:

status=xlswrite(‘filename.xls’,‘数据’,‘工作表’,‘指定区域’)

成功返回1,失败返回0.

例11将矩阵或元胞数组的数据写成xls文件

代码:

xlswrite('testdata.xls',[12.75.02-9863.90-.256])

d={'Time','Temp';1298;1399;1497};

s=xlswrite('tempdata.xls',d,'Temperatures','E1')

运行结果:

textdata.xls

tempdata.xls(Temperatures)

最后看一个综合的实例。

例12读取数据、处理日期数据,根据日期绘制开盘价变化趋势图形。

ExpData.xlsx文件如下:

代码:

[num,txt]=xlsread('ExpData.xlsx');

%读取excel表格中的数据,数值存入num,文本存入txt

date=txt(2:

end,1)%取出日期数据单独处理

t=datenum(date)%将日期转化为数值(方便绘图使用)

date1=datestr(t)%将数值转化为日期

h=figure;%生成空的图形窗口

set(h,'color','w');%将图的背景颜色设为白色

plot(t,num(:

1));%以日期为横坐标,开盘价为纵坐标,绘制图形

%plot(t,num(:

1),'*');%绘制散点图

datetick('x',23);%将x轴标注变成日期格式:

mm/dd/yyyy

xlabel('日期');%标注x轴

ylabel('开盘价');%标注y轴

title=('上海证交所');%标注图片名称(很奇怪!

居然标题显示不出来)

运行结果:

txt=

'时间''开盘价''最高价''最低价''收盘价''成交量''成交金'

'2014/11/25'''''''''''''

'2014/11/26'''''''''''''

'2014/11/27'''''''''''''

'2014/11/28'''''''''''''

'2014/12/1'''''''''''''

'2014/12/2'''''''''''''

'2014/12/3'''''''''''''

'2014/12/4'''''''''''''

'2014/12/5'''''''''''''

'2014/12/8'''''''''''''

'2014/12/9'''''''''''''

'2014/12/10'''''''''''''

'2014/12/11'''''''''''''

'2014/12/12'''''''''''''

'2014/12/15'''''''''''''

date=

'2014/11/25'

'2014/11/26'

'2014/11/27'

'2014/11/28'

'2014/12/1'

'2014/12/2'

'2014/12/3'

'2014/12/4'

'2014/12/5'

'2014/12/8'

'2014/12/9'

'2014/12/10'

'2014/12/11'

'2014/12/12'

'2014/12/15'

t=

735928

735929

735930

735931

735934

735935

735936

735937

735938

735941

735942

735943

735944

735945

735948

date1=

25-Nov-2014

26-Nov-2014

27-Nov-2014

28-Nov-2014

01-Dec-2014

02-Dec-2014

03-Dec-2014

04-Dec-2014

05-Dec-2014

08-Dec-2014

09-Dec-2014

10-Dec-2014

11-Dec-2014

12-Dec-2014

15-Dec-2014

 

附录:

Matlab中的文件读写

1.文本文件的打开:

语法:

fid=fopen(‘文件名’,‘打开方式’)

fid为文件句柄【术语‘句柄’:

用来操作所打开文件的标识】,若fid返回值>0,表示打开文件成功;若返回值是-1,表示打开文件失败(一般是路径、文件名、后缀名出错引起的)。

注意:

用完文件要关闭:

fclose(fid);

打开方式有如下几种:

'r'

只读,文件必须存在(缺省的打开方式)

'w'

写文件,若文件已存在则原内容将被覆盖;若文件不存在则新建一个

'a'

在文件末尾添加,文件若不存在则新建一个

'r+'

可读可写,文件必须存在

'w+'

可读可写,若文件已存在则原内容将被覆盖;若文件不存在则新建一个

'a+'

可读可写可添加,文件若不存在则新建一个

文件有两种格式:

二进制文件(b)和文本文件(t),在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符't':

fid=fopen('output.txt','wt+');

2.文本文件的读取

语法:

[A,count]=fscanf(fid,format,size);

A——用来存放读取的数据

count——(可选)返回读取数据的个数

fid——为文件句柄

format用来控制读取的数据格式,由%加上格式符组成,下表中是常见的格式符,在%之后可以加上数据宽度,如%12d

c

字符型

g

浮点数(自动)

d

十进制整数

o

八进制

e

浮点数(科学计数法)

s

字符串

f

浮点数(小数形式)

x

十六进制

 

size——(可选)默认为读取整个文件,取值可以是:

N

读取N个数据到一个列向量

Inf

读取整个文件

[m,n]

读取mn个数据到一个mn矩阵中,按列存放

 

3.文本文件的写入

语法:

count=fprintf(fid,format,输出变量列表)

◆将输出变量按指定的格式写入文件中

◆若省略fid,则表示在屏幕上输出

◆count(可选)返回所写入的数据元素个数

◆format以%开头,通常由以下几个部分组成:

●fprintf命令的格式说明符

c

字符型

g

浮点数(自动)

d

十进制整数

o

八进制

e

浮点数(科学计数法)

s

字符串

f

浮点数(小数形式)

x/X

十六进制

 

●format中还可以使用的特殊字符

\b

退后一格

\t

水平制表符

\f

换页

\\

反斜杠

\n

换行

''

单引号

\r

回车

%%

百分号

读写的定位(判断和控制文件的读写位置:

是否读完,或读写指定位置数据等)

❑Matlab提供了四种文件位置指针定位函数:

fseek:

定位到文件的某个位置,若定位成功,status返回值为0,否则返回-1

status=fseek(fid,offset,origin)

offset表示位置指针相对偏移的字节数,‘+’表示向末尾走,‘-’表示向开头走;

origin表示参照位置:

'cof'表示当前位置,'bof'表示开始位置,'eof'表示末尾;

ftell:

返回值为从文件开始到指针当前位置的字节数:

position=ftell(fid)

frewind:

将位置指针返回到文件的起始位置:

frewind(fid)

feof:

判断文件位置指针是否达到文件结束位置,若是则返回1,否则返回0:

eofstat=ftell(fid)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1