文件操作(File IO)
使用文件有诸多优点:
首先它是被一直存储在硬盘中的,它里面储存着信息,文件可以由操作系统轻松的管理,文件同时也可以被复制和移动,可以被不同软件访问。
对于MATLAB,它不仅可以处理其专有文件格式(.mat .m),还可以处理txt文本文档、二进制文件,甚至Excel文件。
pwd
命令可以显示当前所在的目录 (Print Working Directory)
ls
命令可以列出当前目录下所有文件
cd
命令可以改变目录 (Change Directory)
cd('Lesson 08') %进入当前文件夹下的Lesson 08文件夹
cd('..') %返回上级目录
cd('../..') %返回上上级目录
mkdir('folder') %创建新目录
rmdir('folder') %删除空目录
save
命令可以保存当前工作区
load
命令可以加载当前工作区
save my_data_file data s a %将变量a和s保存至my_data_file.mat
load my_data_file %从my_data_file.mat中加载变量
Excel文件操作
MATLAB支持读取和写入Microsoft Excel文件。需要用到xlsread
和xlswrite
两个函数。
>> [num,txt,raw] = xlsread('Nashville_climate.xlsx')
num
元素包含了表中所有的数字,txt
则是包含了文字,raw
储存了所有
>> temps = xlsread('Nashville_climate.xlsx') %temps包含有数字
>> [temps txt] = xlsread('Nashville_climate.xlsx')
>> [~, text] = xlsread('Nashville_climate.xlsx') %只输出text
>> [~, ~, everything] = xlsread('Nashville_climate.xlsx')
>> num = xlsread('Nashville_climate.xlsx', 1, 'D15:E17')
%数字1表示工作簿,D15指定了D15这个单元格
>> num = xlsread('Nashville_climate.xlsx', 1, 'D15:E17')
至于xlswrite
,可以写入CSV
文件。不详细讨论了。
txt文件操作
fid = fopen(filename, permission);
fclose(fid);
其中permission这个参数可以有很多,如:rt
wt
at
r+t
w+t
a+t
下面用一个示例来进行txt文件读取操作的演示。
function view_text_file(filename)
fid = fopen(filename,'rt');
if fid < 0
error('error opening file %s\n', filename);
end
% Read file as a set of strings, one string per line:
oneline = fgets(fid);
while ischar(oneline)
fprintf('%s',oneline) % display one line
oneline = fgets(fid);
end
fprintf('\n');
fclose(fid);
再来看看如何写入txt文件。
function write_temp_precip_txt(filename)
Title_1 = 'Climate Data for Nashville, TN';
Title_2 = '(Average highs (F), lows (F), and precip (in)';
Label_1 = ' High ';
Label_2 = ' Low ';
Label_3 = 'Precip';
Mo_1 = {'Jan','Feb','March','April','May','June'};
Mo_2 = {'July','Aug','Sep','Oct','Nov','Dec'};
Data_1 = [
46 28 3.98
51 31 3.7
61 39 4.88
70 47 3.94
78 57 5.08
85 65 4.09];
Data_2 = [
89 69 3.78
88 68 3.27
82 61 3.58
71 49 2.87
59 40 4.45
49 31 4.53];
fid = fopen(filename,'w+t');
if fid < 0
fprintf('error opening file\n');
return;
end
fprintf(fid,'%s\n',Title_1);
fprintf(fid,'%s\n',Title_2);
fprintf(fid,'\n');
fprintf(fid,' %s%s%s\n',Label_1,Label_2,Label_3);
for ii = 1:6
fprintf(fid,'%5s: ',Mo_1{ii});
fprintf(fid,'%5.2f,%5.2f,%5.2f\n',Data_1(ii,:));
end
fprintf(fid,'\n');
fprintf(fid,' %s%s%s\n',Label_1,Label_2,Label_3);
for ii = 1:6
fprintf(fid,'%5s: ',Mo_2{ii});
fprintf(fid,'%5.2f,%5.2f,%5.2f\n',Data_2(ii,:));
end
fclose(fid);
二进制文件操作
在更多的时候,使用二进制(binary)文件进行文件存储和读取具有更高的效率。
下面就给出操作二进制的例子来看看MATLAB是如何存取二进制文件的。
function A = read_bin_file(filename,data_type)
fid = fopen(filename,'r');
if fid < 0
error('error opening file %s\n',filename);
end
A = fread(fid,inf,data_type);
fclose(fid);
下面是写入二进制文件
function write_array_bin(A,filename)
fid = fopen(filename,'w+');
if fid < 0
error('error opening file %s\n', filename);
end
fwrite(fid,A,'double');
fclose(fid);
小结:
MATLAB提供了对常用文件类型操作的支持,使用文件,我们可以更方便地读入大量数据并进行操作,同时输出易于阅读的数据。