第11章 文件操作
- (11.1) 文件的打开与关闭
- (11.2) 文本文件的读写
- (11.3) 二进制文件的读写
- (11.4) 文件指针位置控制
- (11.5) CSV文件的读写
- (11.6) TEXT文件的读写
- (11.7) EXCEL文件的读写
(11.1) 文件的打开与关闭
fid = fopen(fileName,permission);
文件打开成功时,
fid
返回一个整数,打开不成功时,返回-1。permission
是文件的打开方式,'r'
代表以读的方式打开(默认),'w'
表示以写的方式打开,'r+'
表示以读写的方式打开,'a'
表示以追加的方式打开。
status = fcolse(fid);
fid
表示待关闭文件的标识号,如果fid为all
,则关闭所有已打开的文件(标准文件如屏幕、键盘除外)。关闭成功,status
返回0,关闭不成功,返回-1。
(11.2) 文本文件的读写
[A,count] = fscanf(fid,fmt,size); %读
count = fprint(fid,fmt,A); %写
A
用于存放读写的数据。count
表示成功读写的数据单元元素个数。fmt
可以控制读取的数据格式,'%d'
表示整数,'%f'
表示浮点数,'e'
表示科学计数法,'%c'
表示字符,'%s'
表示字符串,在%
之后还可以指定宽度如:'%3d'
、'%10.5f'
。size
用来指定A的大小,n
表示指定n个数据,inf
表示指定全部数据,[m,n]
表示指定m×n个数据。
例:现在有一组数据如下,读取文件前6行数据(注意保存文件时的编码方式要改为
ANSI
)。
clc;clear;
fid = fopen('data.txt','r');
title = fscanf(fid,'%s',6); %读取标题行
cache = cell(3,6); %用3×6的元胞数组来接受读取数据
for i = 1:3
cache{i,1} = fscanf(fid,'%s',1);
cache{i,2} = fscanf(fid,'%s',1);
cache{i,3} = fscanf(fid,'%f',1);
cache{i,4} = fscanf(fid,'%f',1);
cache{i,5} = fscanf(fid,'%f',1);
cache{i,6} = fscanf(fid,'%s',1);
end
disp(cache);
fclose(fid);
>>
'1月1日' 'NW' [2.2000] [2.3000] [1024] '晴转多云'
'1月2日' 'W' [1.5000] [ 3] [1022] '晴转多云'
'1月3日' 'SSE' [ 1] [2.6000] [1020] '晴转多云'
(11.3) 二进制文件的读写
[A,count] = fread(fid,size,precision,skip); %读
count = fwrite(fid,A,precision); %写
A
用于存放读写的数据。count
表示成功读写的数据个数。precision
用来指定读写数据的类型如'double'
等。size
表示A的大小。skip
表示指定按比例周期性地跳过一些数据,默认为0。
(11.4) 文件指针位置控制
fseek(fid,offset,origin); %改变文件指针的位置
offset
表示文件指针相对移动的字节数。origin
表示文件指针移动的参照位置,'cof'
或0
表示文件指针的当前位置,'bof'
或-1
表示文件的开头位置,'eof'
或1
表示文件的结束位置。
position = ftell(fid); %查询文件指针的当前位置
status = feof(fid); %判断当前文件指针是否到达了文件尾部,是(status=1)、否(status=0)
(11.5) CSV文件的读写
csvwrite(fileName,M,row,col); %从指定的行和列偏移量开始将矩阵M以逗号分隔(CSV)形式写入文件中(行和列从0开始)
M = csvread(filename,R1,C1,[R1 C1 R2 C2]); %仅读取行偏移量R1和R2及列偏移量C1和C2界定的范围
clc;clear;
fileName = 'data.csv';
row = 1;col = 1;M = magic(4);
csvwrite(fileName,M,row,col);
type(fileName); %查看文件中的数据,只能是包含数值型数据的文件
A = csvread(fileName)
B = csvread(fileName,2,2)
C = csvread(fileName,2,2,[2,2,3,3])
>>
,,,,
,16,2,3,13
,5,11,10,8
,9,7,6,12
,4,14,15,1
A =
0 0 0 0 0
0 16 2 3 13
0 5 11 10 8
0 9 7 6 12
0 4 14 15 1
B =
11 10 8
7 6 12
14 15 1
C =
11 10
7 6
(11.6) TEXT文件的读写
clc;clear;
fileName = 'data.txt';
M = magic(3)*pi;
N = magic(4)*pi;
%用制表符划分相邻元素,每个元素以3位有效数字显示
dlmwrite(fileName,M,'delimiter','\t','precision',3);
type(fileName);
%用追加方式写入文件,1行的行偏移量,用“;”划分相邻元素,显示三位小数
dlmwrite(fileName,N,'-append','delimiter',';','roffset',1,'precision','%.3f');
%delimiter还可以为','、';'、'\t'、' ',coffset控制列偏移量
type(fileName);
>>
25.1 3.14 18.8
9.42 15.7 22
12.6 28.3 6.28
25.1 3.14 18.8
9.42 15.7 22
12.6 28.3 6.28
;;;
50.265;6.283;9.425;40.841
15.708;34.558;31.416;25.133
28.274;21.991;18.850;37.699
12.566;43.982;47.124;3.142
clc;clear;
fileName = 'data.txt';
M = magic(3);
N = magic(4);
dlmwrite(fileName,M,'delimiter',' ');
dlmwrite(fileName,N,'delimiter',' ','-append','roffset',1);
type(fileName);
A = dlmread(fileName,' ')
B = dlmread(fileName,' ',1,1)
C = dlmread(fileName,' ',[1 1 2 2])
>>
8 1 6
3 5 7
4 9 2
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
A =
8 1 6 0
3 5 7 0
4 9 2 0
0 0 0 0
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
B =
5 7 0
9 2 0
0 0 0
2 3 13
11 10 8
7 6 12
14 15 1
C =
5 7
9 2
(11.7) EXCEL文件的读写
xlswrite('filename',A,'sheet','xlRange'); %写
[num,txt,raw] = xlsread('fileName','sheet','xlRange'); %读
A
表示待写入数据的矩阵。sheet
可以指定excel的工作表,缺省时为第一张工作表。xlRange
可以指定读写范围,缺省时为从A1读写。num
表示以矩阵接收excel中数值部分。txt
表示以元胞数组的形式接收excel中字符部分。raw
表示以元胞数组的形式接收excel中数值和字符部分。
clc;clear;
fileName = 'data.xlsx';
sheet = 1;
write_range = 'A1';
read_range = 'A1:F4';
headers = {'日期','风向','风速','气温','气压','天气状况'};
contents = {'1月1日','NW',2.2,2.3,1024,'晴间多云';...
'1月2日','W',1.5,3,1022,'晴间多云';...
'1月3日','SSE',1,2.6,1020,'晴间多云'};
xlswrite(fileName,[headers;contents],sheet,write_range);
[num,txt,raw] = xlsread(fileName,sheet,read_range)
>>
num =
1.0e+03 *
0.0022 0.0023 1.0240
0.0015 0.0030 1.0220
0.0010 0.0026 1.0200
txt =
4×6 cell 数组
{'日期' } {'风向'} {'风速' } {'气温' } {'气压' } {'天气状况'}
{'2021/1/1'} {'NW' } {0×0 char} {0×0 char} {0×0 char} {'晴间多云'}
{'2021/1/2'} {'W' } {0×0 char} {0×0 char} {0×0 char} {'晴间多云'}
{'2021/1/3'} {'SSE' } {0×0 char} {0×0 char} {0×0 char} {'晴间多云'}
raw =
4×6 cell 数组
{'日期' } {'风向'} {'风速' } {'气温' } {'气压'} {'天气状况'}
{'2021/1/1'} {'NW' } {[2.2000]} {[2.3000]} {[1024]} {'晴间多云'}
{'2021/1/2'} {'W' } {[1.5000]} {[ 3]} {[1022]} {'晴间多云'}
{'2021/1/3'} {'SSE' } {[ 1]} {[2.6000]} {[1020]} {'晴间多云'}
参 考 资 料 来 源 参考资料来源 参考资料来源
- 《科学计算与MATLAB语言》.刘卫国.蔡旭晖.吕格莉.何小贤.中国大学MOOC.
- 《MATLAB软件与基础数学实验》.李换琴.朱旭.王勇茂.籍万新.西安交通大学出版社.
- 《MATLAB R2018a完全自学一本通》.刘浩.韩晶.电子工业出版社.
- 《MATLAB工程与科学绘图》.周博.薛世峰.清华大学出版社.
- 《Matlab教程 - 图像处理(第1讲)》.正月点灯笼.https://www.bilibili.com.
- 《Matlab教程 - 图像处理(第2讲:喵去哪了)》.正月点灯笼.https://www.bilibili.com.
- 《MATLAB从入门到秃头》.古德谓尔.https://www.bilibili.com.
- 《自动控制原理实验教程》.巨林仓.西安交通大学出版社.
博 客 创 作 : A i d e n L e e 博客创作:Aiden\ Lee 博客创作:Aiden Lee
特别声明:文章仅供学习参考,转载请注明出处,严禁盗用!