第11章 文件操作
- (11.1) 文件的打开与关闭
- (11.2) 文本文件的读写
- (11.3) 二进制文件的读写
- (11.4) 文件指针位置控制
- (11.5) CSV文件的读写
- (11.6) TEXT文件的读写
- (11.7) EXCEL文件的读写
(11.1) 文件的打开与关闭
fid = fopen(fileName,permission);
status = fcolse(fid);
(11.2) 文本文件的读写
[A,count] = fscanf(fid,fmt,size); %读
count = fprint(fid,fmt,A); %写
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); %写
(11.4) 文件指针位置控制
fseek(fid,offset,origin); %改变文件指针的位置
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'); %读
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]} {'晴间多云'}