matlab读写
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB二进制数据文件的读写
(2011-06-04 19:44:27)
转载▼
标签:
easleyhux
matlab
分类:MATLAB
二进制读写
杂谈
所谓二进制格式读写,个人认为其核心是“按指定数据类型大小读写内存”,所以其特殊之处应该在于读写时要指定数据类型。
实例:
clc; clear all;
% 两个实数
data = [1.234 5.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-25 20:29
提问者:526beyond| 浏览次数:1871次
我来帮他解答
2011-3-26 08:05
满意回答
使用textread函数可以跳过文件头
textread('name.dat','%f %f %f,','headerlines',1)
这样可以跳过1行多行的话可以把headerlines修改下,'%f %f %f,表示数据有三列都是浮点类型,根据实际写
追问
Number of outputs must match the number of unskipped input fields. 出现了这个,是怎么回事?
回答
输入输出列数要匹配
你看看textread的例子程序就知道了
追问
Number of outputs must match the number of unskipped input fields.
Error in ==> textread at 176
[varargout{1:nlhs}]=dataread('file',varargin{:});
完整的是这样的,麻烦你呢!
回答
例子3:myfile.txt 中的内容如下:
% this a comment
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 中的内容如下:
Sally Level1 12.34 45 Yes
相应语句为:
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)
参考资料:
/syysnhappy/archive/2010/10/08/5928359.aspx
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=("file a","r");其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。
又如:FILE *fphzkfphzk=("c:\\hzk16',"rb")其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。
两个反斜线“\\ ”中的第一个表示转义字符,第二个表示根目录。
使用文件的方式共有12种,下面给出了它们的符号和意义。
第二个形式参数表示打开文件的类型。
关于文件类型的规定参见下表。
表文件操作类型
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
字符含义
————————————————————————————
"r" 打开文字文件只读
"w" 创建文字文件只写
"a" 增补, 如果文件不存在则创建一个
"r+" 打开一个文字文件读/写
"w+" 创建一个文字文件读/写
"a+" 打开或创建一个文件增补
"b" 二进制文件(可以和上面每一项合用)
"t" 文本文件(默认项)
11
| 评论
向TA求助
回答者:Hexpert| 七级
Matlab中数据文件的读写操作说明2(打开关闭文件及文件读写)
(2011-08-25 23: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=[1 2 3 4 5 6 7 8 9];
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 =
打开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.00 1.00000000
0.10 1.10517092
0.20 1.22140276
0.30 1.34985881
0.40 1.49182470
0.50 1.64872127
0.60 1.82211880
0.70 2.01375271
0.80 2.22554093
0.90 2.45960311
1.00
2.71828183
例: 利用 fprintf 函数在显示器上输出字符串
fprintf(1,'It''s Friday.\n')
It's Friday.
在该例中,利用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是[12 90]的矩阵,
%这里'%f %f'表示读取数据的形势,他是按原始数据型读取
fclose(fid); %关闭文件
注:本文根据原博文
/s/blog_4d1865f00100ap6j.html和
/s/blog_6e44841b0100mmcb.html进行修改。
几个很简单的matlab题
2007-5-9 15:08
提问者:zjncy| 浏览次数:1647次
只需要m文件就可以了,但是m文件要能通过得出正确结果(顺便说一下是在什么哪个matlab版本环境下的,尽量不要使用扩展工具箱)
1. 猜数游戏。
首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。
根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。
用户最多可以猜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,要求该文件可以读、写。
文件内容如下:
NAME SCORE
Liuqi 84.0
Zhangbin 87.5
Liping 90.0
Wangwei 78.0
Wujian 92.5
… …
6. 已知某班的5名学生的三门课成绩列表如下:
学生序号 1 2 3 4 5
高等数学 78 89 64 73 68
外语 83 77 80 78 70
MATLAB语言 82 91 78 82 68
试写出有关命令,先分别找出三门课的最高分及其学生序号;然后找出三门课总分的最高分及其学生序号。
针对上小题的成绩表,求出其三门课总分存入数组ZF,再利用SORT命令对之按降序排序,同时把相应的学生序号存入数组XH。
7. 试编一个m程序,将一维数组x中的N个数按颠倒的次序重新存储。
如N=5,原来x为:
x=[ 1 3 5 7 9 ]
而经过颠倒处理后x中数据的次序应该为:
x=[ 9 7 5 3 1 ]
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
我来帮他解答
2007-5-10 19:34
满意回答
太多了,不全会,完成部分。
matlab6.5版
%【1】
x=round(100-rand*(100-1))
for k=1:7
y=input('Input number:')
if y>x
disp('High')
elseif y<x
disp('Low')
else y==x
disp('You won')
return
end
end
运行结果:
x = 22
Input number:20
y = 20
Low
Input number:30
y = 30
High
Input number:25
y = 25
High
Input number:22
y = 22
ans = 1
You won
%【2】
clc;clear
m=30
for i=1:m
p = primes(i);
end
p
运行结果:
m =
30
p =
2 3 5 7 11 13 17 19 23 29
%【3】
N=20
f(1)=1;f(2)=1;
for k=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('input a:')
b=input('input b:')
c=input('input c:')
s=(a+b+c)/2;
Area=sqrt(s*(s-a)*(s-b)*(s-c))
运行结果:
input a:3
a = 3
input b:4
b = 4
input c:5
c = 5
Area = 6
%【7】
x=[ 1 3 5 7 9 ]
xx=rot90(rot90(x))
运行结果:
x =
1 3 5 7 9
xx =
9 7 5 3 1
%【10】
f='y-4*x^2+3'
g='x^2/4+y^2-1'
[x,y]=solve(f,g)
ezplot(f)
hold on
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
| 评论。