MATLAB——文件读写(1)
1、文件打开关闭
(1)文件打开
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等。缺省数据精度为uchar,即无符号字符格式。
a=[ ];
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','wb')%写入'w'
fwrite(fid,a,'double')
fclose(fid)
>> read fid = 3 %大于0,说明文件创建成功 ans = 9 %写入9个数据 ans = 0 %等于0,说明关闭成功
乱码的二进制数
在ultra中显示如下,这是因为二进制表示位数太长,很麻烦
(2)读二进制文件
fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
[A,COUNT]=fread(fid,size,precision)
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。 precision用于控制所写数据的精度,其形式与fwrite函数相同。
clear all
a=[ ];
fid=fopen('C:\Users\ning wang\Desktop\MATLAB\test.txt','rb')%读取'r'
[A,COUNT]=fread(fid,'double')
fclose(fid)
从二进制返回到double类型数组。
一定要注意读取的格式,否则返回的类型会发生变化
clear all
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','rb') [A,count]=fread(fid) fclose(fid)
将读写整合在一个程序里
clear all
a=[ ];
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','wt')
fwrite(fid,a,'double')
fclose(fid) fid1=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','rt')
[A,count]=fread(fid,'double')
s=A()+A()
3、文本文件的读写操作
(1)写文本文件
fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:
fprintf(fid,format,A)
说明:fid为文件句柄,指定要写入数据的文件,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等,与fscanf函数相同,A是用来存放数据的矩阵。
clear all
a=[ ];
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','w')
fprintf(fid,'%f',a)
fclose(fid)
控制精度
clear all
a=[ ];
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test.txt','w')
fprintf(fid,'%.2f',a)
fclose(fid)
clear all
x = :.:;
A = [x; exp(x)];%矩阵 fileID = fopen('exp.txt','w'); %打开,写入
fprintf(fileID,'%6s %12s\n','x','exp(x)');%
fprintf(fileID,'%6.2f %12.8f\n',A);
fclose(fileID);
可以看到换行符,可以看到长度,可以看到小数位数,都是右对齐,按列取数,按行排列、可以看出记事本和ultra显示的差异
clear all
x = :.:;
A = [x; exp(x)];%矩阵 fileID = fopen('exp.txt','w'); %打开,写入
fprintf(fileID,'%6s %12s\r\n','x','exp(x)');
fprintf(fileID,'%6.2f %12.8f\r\n',A);
fclose(fileID);
在记事本中,可以显示出换行
利用type ,查看文件内容
(2)读文本文件
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:
[A,COUNT]=fscanf(fid,format,size)
说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。
clear all
fid=fopen('C:\Users\Administrator\Desktop\MATLAB\test1.txt')
data=fscanf(fid,'%d',[,inf])
fclose(fid)
可以看出是2列n行。
clear all
x = ::;
y = [x;rand(,)];
fileID = fopen('nums2.txt','w');
fprintf(fileID,'%d %4.4f\n',y);
fclose(fileID); type nums2.txt fileID = fopen('nums2.txt','r');
formatSpec = '%d %f';
sizeA = [ Inf];
A = fscanf(fileID,formatSpec,sizeA)
fclose(fileID);
clear all
str = '78°C 72°C 64°C 66°C 49°C';
fileID = fopen('temperature.txt','w');
fprintf(fileID,'%s',str);
fclose(fileID); fileID = fopen('temperature.txt','r');
degrees = char();%摄氏度的符号
[A,count] = fscanf(fileID,['%d' degrees 'C'])
fclose(fileID);
跳过特殊符号
字符串和数字符号之间的转换。
4、 日期的循环读取
(1)pause()函数
clear all fileID = fopen('dateclc.txt','w'); %打开,写入 while ()
a=datestr(now,)
fprintf(fileID,'%s\r\n',a);
pause()%每隔5秒写入一条日期
end
5、timer()函数
(1)timer定义
设置timer()属性,
TaskTimer=timer('Name','FebirdTimer','TimerFcn',@ExecuteTask,'ErrorFcn',@ExecuteError,'Period',1,'ExecutionMode','fixedrate');
其中 TimerFcn 为 Timer 执行的函数,后面的 ‘@ExcuteTask’ 就是你定义的函数名;同样 ErrorFcn 也是一样。
Period 为执行周期,ExecutionMode 为执行模式,fixedrate 为固定频率。
TimerFcn 的定义默认必须有两个参数:function ExcuteTask(obj,eventdata)。其中 obj 为执行该函数所对应的 timer 对象,eventdata 为事件数据,一般里面为具体时间。
当需要在 ExcuteTask 中传入参数的时候,那么 Timer 可以这样定义:set(t,'TimerFcn',{@ExecuteTask,var1});那么这时函数定义应该 为: functionExcuteTask(obj,eventdata,var1)
ExecutionMode 执行的模式,就是确定TimerFcn执行周期计算的始末点
’singleShot’ :只能执行一次,故Period属性不起作用,其他模式都可以执行多次
‘fixedSpacing’ :上一次TimerFcn执行完毕时刻到下一次TimerFcn被加入队列时刻之间的间隔
‘fixedDelay’ :上一次开始执行到下一次被加入队列之间的间隔
‘fixedRate’ :前后两次被加入到执行语句队列时刻之间的间隔
TasksToExecute 执行次数:TimerFcn被执行的次数,默认为1次,设置多次时需要设置执行周期Period
StartDelay 启动时延:从启动Timer开始到第一次把TimerFcn的加入到Matlab的执行语句队列中去的时延, 默认值为0s
clear all
htimer=timer('TimerFcn','disp(''Hello World!'')', 'Period', ,'executionmode','fixeddelay','TasksToExecute',)
start(htimer)
创建日期txt文件,每两秒写入txt中一个日期,分别是主体程序,定义的函数和结束程序
clear all
global fileID htimer date1 time1 %全局变量
date=datestr(now,'yyyy-mm-dd') %日期,文件名
fileID=fopen([date '.txt'],'w')%创建txt文件
htimer=timer('TimerFcn',@date_my, 'Period', ,'executionmode','fixeddelay')
start(htimer)
function date_my(obj,event)
global fileID htimer date1 time1 %全局变量
date1=datestr(now,'yyyy-mm-dd')
time1=datestr(now,'HH:MM:SS')
[a,b]=weekday(now,'long') fprintf(fileID,[date1 ' ' time1 ' ' b '\r\n'])
end
global fileID htimer date1 time1
stop(htimer) %暂停程序
fclose(fileID)%关闭txt文件
改进程序,加入表头
clear all
global fileID htimer date1 time1 %全局变量
date=datestr(now,); %日期,文件名
fileID=fopen([date '.txt'],'w');%创建txt文件
%fprintf(fileID,[date1 ' ' time1 ' ' b '\r\n'])
fprintf(fileID,'%6s%6s%6s\r\n','日期','时间','星期');
htimer=timer('TimerFcn',@date_my, 'Period', ,'executionmode','fixeddelay')
start(htimer)
clear all
global fileID htimer date1 time1 %全局变量
date=datestr(now,); %日期,文件名
fileID=fopen([date '.txt'],'w');%创建txt文件
fprintf(fileID,['日期' ' ' '时间' ' ' '星期 ' '\r\n'])
%fprintf(fileID,'%6s%6s%6s\r\n','日期','时间','星期');
htimer=timer('TimerFcn',@date_my, 'Period', ,'executionmode','fixeddelay')
start(htimer)
以上是分别用规定长度和空格两种方式将表头输入,
利用timer画图动起来
clear all
t=timer('Name','CircleTimer','TimerFcn',@CircleTask,'Period',,'ExecutionMode','fixedspacing');
%本句解释成中文就是:
%t= timer(计时器名字是啥?,叫CircleTimer,要输入的TimerFcn回调函数是啥? ,
%用CircleTask这个函数,每次隔多久运行?,一秒,
%执行时间间隔的模式是什么?,上次执行完毕到这次执行计时);
ud=;
t.UserData=ud;
start(t);
function CircleTask(obj,event)
event_time = datestr(event.Data.time) %使用event对象的data的time属性获得系统当前时间,并转换成字符串
d=event_time(:) %由于本身保存的是年月日小时分钟秒,但我只需要秒的数据,因此单独取出
d=str2double(d) %将字符串转换成数字
alpha=:pi/:pi/*d %角度[,*pi]
ud=obj.UserData; %使用obj对象的UserData属性传参
R=ud;%半径
x=R*cos(alpha);
y=R*sin(alpha);
axis equal
%axis([- - ])
plot(x,y,'o-')
stop(t)
没有使用全局变量,
6、交互设计
6.1 写入
字符串写入
clear all
clc
prompt = 'What is your string? ';
str = input(prompt,'s')
数字写入
clear all
clc
prompt = 'What is the original value? ';
x = input(prompt)
y = x*10
6.2 输出
clear all
clc
A = [15 150];
S = 'Hello World.';
disp(A)
disp(S)
6.3 组合使用
clear all
clc
A = input('Input a number:');
disp(['You input number is:',num2str(A)]);
注意,中括号括起来,还有,数字转字符串。
clear all
clc
A = input('Input:','s');
disp(['You input:',A]);
MATLAB——文件读写(1)的更多相关文章
- MATLAB——文件读写(2)
一.importdata函数 1. txt 如图,提取经纬度. 程序如下 clear all test=importdata('经纬度.txt'); [r,c]=size(test.data);%ro ...
- matlab文件读写处理实例(三)——读取文件特定行
(1) 读取文件特定行 CODE: ; ; if nline==line fprintf(fidout,'%s\n',tline); data ...
- matlab文件读写处理实例(二)——textread批量读取文件
问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\
- matlab文件读写处理实例(一)——不规则文件读取
数据: A) Title: Income Data B) Relevant Information: Marketing Database. Source: Impact Resources, Inc ...
- 通过文件读写方式实现Matlab和Modelsim的联合仿真
虽然Modelsim的功能非常强大,仿真的波形可以以多种形式进行显示,但是当涉及到数字信号处理的算法的仿真验证的时候,则显得有点不足.而进行数字信号处理是Matlab的强项,不但有大量的关于数字信号处 ...
- Matlab文件操作
1. Matlab文件操作主要有三个步骤:首先打开文件,然后对文件进行读写操作,最后要关闭文件. 2. fid=fopen(文件名,打开方式) 'r' 只读,文件必须存在(缺省的打开方式) 'w' ...
- Matlab文件和数据的导入与导出
ref: https://blog.csdn.net/zengzeyu/article/details/72530596 Matlab文件和数据的导入与导出 2017年05月19日 15:18:35 ...
- C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind
由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...
- mat文件读写
一起来学演化计算-mat文件读写 觉得有用的话,欢迎一起讨论相互学习~Follow Me Matlab读取和保存mat文件数据 在matlab命令行中输入save 变量名a,将a变量保存在新生成的a. ...
随机推荐
- 前端每日实战:17# 视频演示如何用纯 CSS 创作炫酷的同心矩形旋转动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/bMvbRp 可交互视频教程 此视频 ...
- 简单的节流函数throttle
在实际项目中,总会遇到一些函数频繁调用的情况,比如window.resize,mouseover,上传进度类似的触发频率比较高的函数,造成很大的性能损耗,这里可以使用节流函数来进行性能优化,主要是限制 ...
- CMAKE交叉编译快速入门
cmake 工具 cmake 使用非常简单,最常用的用法是 cmake . 在当前目录执行cmake 官方帮助 -D <var>:<type>=<value> -D ...
- python学习的新篇章--面向对象
面向对象的学习笔记 关键要素: 类:class 用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法. 数据成员: 类的不同属性数据 对象: 类的一个实例 ...
- 有关于python内置函数exec和eval一些见解笔记
eval是将函数内的字符串以计算式的方式进行计算并给与外部一个值. 例: a=eval('1+1') print(a) >>>>2 但是如果出现在函数内部字符串中进行赋值会抛出 ...
- 《即时消息技术剖析与实战》学习笔记12——IM系统如何提升图片、音视频消息发送、浏览的体验
IM系统如何提升用户发送.浏览图片和音视频消息的体验呢?一是保证图片.音视频消息发送得又快又稳,二是保证用户浏览播放图片.音视频消息时流畅不卡顿. 一.提升用户发送图片.音视频的体验 1. 多上传接入 ...
- 上线前测试的bug,要不要处理,跟版本的关系
最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...
- 【JDK】JDK源码分析-HashMap(2)
前文「JDK源码分析-HashMap(1)」分析了 HashMap 的内部结构和主要方法的实现原理.但是,面试中通常还会问到很多其他的问题,本文简要分析下常见的一些问题. 这里再贴一下 HashMap ...
- java idea spring mvc 入门 最起码 我8080跑起来了
IDEA建立Spring MVC Hello World 详细入门教程 https://www.cnblogs.com/wormday/p/8435617.html
- iview admin template 基础模板架子
https://github.com/iview/iview-admin/tree/template