matlab读写.docx

上传人:b****2 文档编号:24517319 上传时间:2023-05-28 格式:DOCX 页数:20 大小:42.78KB
下载 相关 举报
matlab读写.docx_第1页
第1页 / 共20页
matlab读写.docx_第2页
第2页 / 共20页
matlab读写.docx_第3页
第3页 / 共20页
matlab读写.docx_第4页
第4页 / 共20页
matlab读写.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

matlab读写.docx

《matlab读写.docx》由会员分享,可在线阅读,更多相关《matlab读写.docx(20页珍藏版)》请在冰豆网上搜索。

matlab读写.docx

matlab读写

MATLAB二进制数据文件的读写

(2011-06-0419:

44:

27)

转载▼

标签:

easleyhux

matlab

二进制读写

杂谈

分类:

MATLAB

所谓二进制格式读写,个人认为其核心是“按指定数据类型大小读写内存”,所以其特殊之处应该在于读写时要指定数据类型。

实例:

clc;clearall;

%两个实数

data=[1.2345.678];

%先写文件

fid=fopen('ceshi.bin','w');

%设置好格式,并且写入

fwrite(fid,data,'float32');

fclose(fid);

%再读文件

fid=fopen('ceshi.bin','rb');

%设置好格式,并且读出来

data1=double(fread(fid,5,'*float32'));

fclose(fid);

disp(data)

disp(data1')

总结:

二进制格式读写文件,应该特别注意其数据类型、指定个数。

matlab要读入dat文件有字符标题,和很多数据,应该怎么读取?

2011-3-2520:

29

提问者:

526beyond|浏览次数:

1871次

我来帮他解答

输入内容已经达到长度限制

还能输入9999字

插入图片删除图片插入地图删除地图插入视频视频地图

参考资料:

匿名回答提交回答取消

2011-3-2608:

05

满意回答

使用textread函数可以跳过文件头

textread('name.dat','%f%f%f,','headerlines',1)

这样可以跳过1行多行的话可以把headerlines修改下,'%f%f%f,表示数据有三列都是浮点类型,根据实际写

追问

Numberofoutputsmustmatchthenumberofunskippedinputfields.

出现了这个,是怎么回事?

回答

输入输出列数要匹配

你看看textread的例子程序就知道了

追问

Numberofoutputsmustmatchthenumberofunskippedinputfields.

Errorin==>textreadat176

[varargout{1:

nlhs}]=dataread('file',varargin{:

});

完整的是这样的,麻烦你呢!

回答

例子3:

myfile.txt中的内容如下:

%thisacomment

1,2,3,4

5,6,7,8

9,10,11,12

相应的语句为:

filename='.myfile.txt';

[data1,data2,data3,data4]=textread(filename,'%n%n%n%n','delimiter',',','headerlines',1);

这里告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。

例子4:

myfile.txt中的内容如下:

SallyLevel112.3445Yes

相应语句为:

filename='.myfile.txt';

[names,types,x,y,answer]=textread(filename,'%s%s%f%d%s',1)

4.1如果要忽略12.34这个浮点数。

[names,types,y,answer]=textread(filename,'%s%s%*f%d%s',1)

参考资料:

赞同

1

|评论

向TA求助

回答者:

大海jianfei来自团队其他编程语言|五级采纳率:

40%

擅长领域:

C#/.NET其他编程语言校园生活数学数据库

参加的活动:

暂时没有参加的活动

fopen(filename,"w+b")

例如FILE*fp=fopen("test.dat","wb+");

--详细说明

fopen()函数的用法

fopen函数用于打开文件,其调用格式为:

FILE*fopen(char*filename,*type);

fopen()函数中第一个形式参数表示文件名,可以包含路径和文件名两部分。

如:

"B:

TEST.DAT"

"C:

\\TC\\TEST.DAT"

注意:

如果将路径写成"C:

\TC\TEST.DAT"是不正确的,这一点要特别注意。

fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式)其中,“文件指针名”必须是被说明为FILE类型的指针变量,“文件名”是被打开文件的文件名。

“使用文件方式”是指文件的类型和操作要求。

“文件名”是字符串常量或字符串数组。

例如:

FILE*fp;fp=("filea","r");其意义是在当前目录下打开文件filea,只允许进行“读”操作,并使fp指向该文件。

又如:

FILE*fphzkfphzk=("c:

\\hzk16',"rb")其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。

两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录。

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

第二个形式参数表示打开文件的类型。

关于文件类型的规定参见下表。

表文件操作类型

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

字符含义

————————————————————————————

"r"打开文字文件只读

"w"创建文字文件只写

"a"增补,如果文件不存在则创建一个

"r+"打开一个文字文件读/写

"w+"创建一个文字文件读/写

"a+"打开或创建一个文件增补

"b"二进制文件(可以和上面每一项合用)

"t"文本文件(默认项)

赞同

11

|评论

向TA求助

回答者:

Hexpert|七级

Matlab中数据文件的读写操作说明2(打开关闭文件及文件读写)

(2011-08-2523:

03:

47)

标签:

matlab

数据文件

文件读写

数据导入导出

分类:

编程设计

1、打开文件

在Matlab中进行文件的数据读写之前必须先打开文件,打开文件用fopen命令,其调用的格式为

fid=fopen(文件名,‘打开方式’)%文件名为字符串,可包括文件所在路径,默认为当前工作路径,fid为所打开文件句柄,后面对文件读写及关闭均需要此文件句柄。

若打开文件成功,则返回的fid值大于0,否则返回负值。

打开方式可为:

1)‘r’:

以只读方式打开文件(默认的方式),所打开的文件必须已存在。

2)‘r+’:

以读写方式打开文件,打开后先读后写。

所打开的文件必须已存在。

3)‘w’:

以写入方式打开文件。

所打开的文件已存在则更新;不存在则创建。

4)‘w+’:

以读写方式打开文件。

所打开的文件已存在则更新;不存在则创建。

5)‘a’:

以追加方式打开文件,打开文件后指针位于文件末尾。

文件不存在则创建。

6)‘a+’:

以追加方式打开文件,打开文件后,先读入数据再添加数据。

文件不存在则创建。

另外,在这些字符串后添加一个“t”,如‘rt’或‘wt+’,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。

2、关闭文件

在对文件进行读写完成后,需要关闭已经打开的文件以保存数据。

关闭文件用fclose函数,其调用格式为:

fstate=fclose(fid)%关闭fid所表示的文件。

fstate表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1。

如果要关闭所有已打开的文件用fclose(‘all’)。

3、二进制文件的读写

1)写二进制文件

fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。

其调用格式为:

COUNT=fwrite(fid,A,precision)

说明:

其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:

char、uchar、int、long、float、double等。

缺省数据精度为uchar,即无符号字符格式。

a=[123456789];

fid=fopen('d:

test.bin','wb');%以二进制数据写入方式打开文件fid=3%其值大于0,表示打开成功

fwrite(fid,a,'double')%得到ans=9表示写入了9个数据

fclose(fid)%得到ans=0表示关闭成功

2)读二进制文件

fread函数可以读取二进制文件的数据,并将数据存入矩阵。

其调用格式为:

[A,COUNT]=fread(fid,size,precision)

说明:

其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:

N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。

precision用于控制所写数据的精度,其形式与fwrite函数相同。

4、文本文件的读写操作

1)读文本文件

fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。

其调用格式为:

[A,COUNT]=fscanf(fid,format,size)

说明:

其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:

d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。

size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:

N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。

2)写文本文件

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

其调用格式为:

fprintf(fid,format,A)

说明:

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

上面语句中,参数format由%开头,共可由4个部分组成,分别如下:

●标记(flag),为可选部分。

●宽度和精度指示,为可选部分。

●类型标志符,为可选部分。

●转换字符,为必需部分。

A.标记

标记用于控制输出的对齐方式,可以选择的内容如下所示。

标记的可选内容

函数功能示例

负号(-)在参数左侧进行判别%-5.2d

加号(+)在数字前添加符号%+5.2d

空格()在数字前插入空格%5.2d

  0在数字前插入0%05.2d

B.宽度和精度指示

用户可以通过数字指定输出数字的宽度及精度,格式如下:

ans=

  0

  打开fout.txt文件,其内容为:

1.20-43.30000000

1.200000-43.300000

1.20-43.30000000

  从上述结果可以看出宽度和精度控制的效果。

C.转换字符

  转换字符用于指定输出的符号,可以选择的内容如下表所示。

格式化输出的标志符及意义

标志符意义

%c输出单个字符

%d输出有符号十进制数

%e采用指数格式输出,采用小写字母e,如:

3.1415e+00

%E采用指数格式输出,采用大写字母E,如:

3.1415E+00

%f以浮点数的格式输出

%g%e及%f的更紧凑的格式,不显示数字中无效的0

%G与%g相同,但是使用大写字母E

%i有符号十进制数

%o无符号八进制数

%s输出字符串

%u无符号十进制数

%x十六进制数(使用小写字母a-f)

%X十六进制数(使用大写字母A-F)

其中%o、%u、%x、%X支持使用子类型,具体情况这里不再赘述。

格式化输出标志符的效果见下面的例子。

例:

fprintf格式化输出示例。

x=0:

.1:

1;

y=[x;exp(x)];

fid=fopen('fout.txt','wt');

fclose(fid)

ans=

  0

  显示该文件:

0.001.00000000

0.101.10517092

0.201.22140276

0.301.34985881

0.401.49182470

0.501.64872127

0.601.82211880

0.702.01375271

0.802.22554093

0.902.45960311

1.002.71828183

例:

利用fprintf函数在显示器上输出字符串

fprintf(1,'It''sFriday.\n')

It'sFriday.

在该例中,利用1表示显示器,并且用两个单引号显示单引号,使用\n进行换行。

在格式化输出中,这类符号称为转义符。

MATLAB中的常用转义符如下表所示。

  

MATLAB中的常用转义符

转义符功能

\b退格

\f表格填充

\n换行符

\r       回车

\t       tab

\\      反斜线

''或''单引号

%%       百分号

关于format格式的例子(发表博文时有些字符会被过滤掉,这里用了图片):

例:

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

a='string';

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

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

fclose(fid);

fid1=fopen('char1.txt','rt');

b=fscanf(fid1,'%s')%得到b=string,是从fid1的文件读取的

另例:

fid=fopen('fx.txt','r');%得到文件号

[f,count]=fscanf(fid,'%f%f',[12,90]);%把文件号1的数据读到f中。

其中f是[1290]的矩阵,

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

fclose(fid);%关闭文件

注:

本文根据原博文和进行修改。

几个很简单的matlab题

2007-5-915:

08

提问者:

zjncy|浏览次数:

1647次

只需要m文件就可以了,但是m文件要能通过得出正确结果(顺便说一下是在什么哪个matlab版本环境下的,尽量不要使用扩展工具箱)

1.猜数游戏。

首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。

根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“Youwon”,同时退出游戏。

用户最多可以猜7次。

2.用筛选法求某自然数范围内的全部素数。

素数是大于1,且除了1和它本身以外,不能被其他任何整数所整除的整数。

用筛选法求素数的基本思想是:

要找出2~m之间的全部素数,首先在2~m中划去2的倍数(不包括2),然后划去3的倍数(不包括3),由于4已被划去,再找5的倍数(不包括5),…,直到再划去不超过的数的倍数,剩下的数都是素数。

3.Fibonacci数列定义如下:

f1=1

f2=1

fn=fn-1+fn-2(n>2)

求Fibonacci数列的第20项。

4.输入三角形的三条边,求面积。

5.建立数据文件test.dat,要求该文件可以读、写。

文件内容如下:

NAMESCORE

Liuqi84.0

Zhangbin87.5

Liping90.0

Wangwei78.0

Wujian92.5

……

6.已知某班的5名学生的三门课成绩列表如下:

学生序号12345

高等数学7889647368

外语8377807870

MATLAB语言8291788268

试写出有关命令,先分别找出三门课的最高分及其学生序号;然后找出三门课总分的最高分及其学生序号。

针对上小题的成绩表,求出其三门课总分存入数组ZF,再利用SORT命令对之按降序排序,同时把相应的学生序号存入数组XH。

7.试编一个m程序,将一维数组x中的N个数按颠倒的次序重新存储。

如N=5,原来x为:

x=[13579]

而经过颠倒处理后x中数据的次序应该为:

x=[97531]

8.用随机顶点坐标画出5个粉色的三角形,并用黄色的○表示顶点

9.用fzero求取下列方程最接近的5个根

a)弹簧的振动方程

tan(x)=x

b)平板的对流换热方程p=0.1

2*cot(x)=x/p-p/x

10椭圆和抛物线相交求交点

g(x,y)=x^2/4+y^2-1

f(x,y)=y-4x^2+3

我来帮他解答

输入内容已经达到长度限制

还能输入9999字

插入图片删除图片插入地图删除地图插入视频视频地图

参考资料:

匿名回答提交回答取消

2007-5-1019:

34

满意回答

太多了,不全会,完成部分。

matlab6.5版

%【1】

x=round(100-rand*(100-1))

fork=1:

7

y=input('Inputnumber:

')

ify>x

disp('High')

elseify

disp('Low')

elsey==x

disp('Youwon')

return

end

end

运行结果:

x=22

Inputnumber:

20

y=20

Low

Inputnumber:

30

y=30

High

Inputnumber:

25

y=25

High

Inputnumber:

22

y=22

ans=1

Youwon

%【2】

clc;clear

m=30

fori=1:

m

p=primes(i);

end

p

运行结果:

m=

30

p=

2357111317192329

%【3】

N=20

f

(1)=1;f

(2)=1;

fork=3:

N

f(k)=f(k-1)+f(k-2);

end

f'

运行结果:

ans=

1

1

2

3

5

8

13

21

34

55

89

144

233

377

610

987

1597

2584

4181

6765

%【4】

a=input('inputa:

')

b=input('inputb:

')

c=input('inputc:

')

s=(a+b+c)/2;

Area=sqrt(s*(s-a)*(s-b)*(s-c))

运行结果:

inputa:

3

a=3

inputb:

4

b=4

inputc:

5

c=5

Area=6

%【7】

x=[13579]

xx=rot90(rot90(x))

运行结果:

x=

13579

xx=

97531

%【10】

f='y-4*x^2+3'

g='x^2/4+y^2-1'

[x,y]=solve(f,g)

ezplot(f)

holdon

ezplot(g)

运行结果:

x=

[1/16*(190+14*17^(1/2))^(1/2)]

[-1/16*(190+14*17^(1/2))^(1/2)]

[1/16*(190-14*17^(1/2))^(1/2)]

[-1/16*(190-14*17^(1/2))^(1/2)]

y=

[-1/32+7/32*17^(1/2)]

[-1/32+7/32*17^(1/2)]

[-1/32-7/32*17^(1/2)]

[-1/32-7/32*17^(1/2)]

赞同

2

|评论

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

当前位置:首页 > 高等教育 > 工学

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

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