文件输入与输出
MATLAB? 基础与编程入门
2
本章概述
高级例程
低级例程
导入向导参考,File I/O Commands & Syntax
3
SAVE 和 LOAD
load fname
load fname x y z
load fname data*
load fname -ascii
load fname -mat
文件 I/O,高级例程
save fname
save fname x y z
save fname data*
save fname -ascii
save fname -mat
save fname -v4
对类似的变量或文件名可使用 通配符
(*)
>> help iofun 参考,File I/O Commands & Syntax
4
示例:
保存及载入数据
>> clear all % Clear all variables
>> x = 5; x2 = 10; % Create x and x2
>> save xdata x % Save only x into xdata.mat
>> clear all % Clear all variables
>> load xdata % Load xdata.mat
>> whos % Note that x is back
Name Size Bytes Class
x 1x1 8 double array
Grand total is 1 element using 8 bytes
>> x % Still equals 5
x =
5
>> x2 = 10; % Recreate x2
>> save xdata x* % Now save using a wild card
>> clear all % Clear all variables
>> load xdata % Load xdata.mat
>> whos % Both variables were saved
Name Size Bytes Class
x 1x1 8 double array
x2 1x1 8 double array
Grand total is 2 elements using 16 bytes
5
MAT文件数据压缩
在 MATLAB 7中保存的 MAT文件默认具有压缩功能
例如:
>> A = ones(1000);
>> save A14.mat A
此时得到数据文件约占用 4KB的硬盘空间
在 MATLAB 6.5中完成同样的操作,则占据了约 977KB的硬盘空间
如果需要在早期版本 (MATLAB 6或者 6.5)打开 MATLAB 7
下保存的 MAT数据文件,则需要在保存文件时使用 -v6命令行开关
6
从使用分隔符的文件中读取数据
CSVREAD- 从文本文件中读取数据,该文本文件使用逗号分隔数值数据
DLMREAD-从文本文件中读取数据,该文本文件使用分隔符分隔数值数据
XLSREAD-从 Excel数据表中读取数据
尝试使用上述不同的函数分别读取下面的文件:
>> csvexamp.txt
>> dlmexamp.txt
>> xlsexamp.xls
7
>> [team,w,l,wp,playoff] = textread('season.txt','%s %d %d %f %c')
team =
'Broncos'
'Falcons'
'Lions'
'Patriots'
'Vikings'
w =
14
14
5
15
9
l =
2
...
读取具有一般结构形式的 ASCII 文本文件
支持 C语言函数 fscanf 的子集从文本文件中读取数据
8
从文本文件中读取数据
同样的操作也可以使用 textscan函数实现:
>> fid = fopen('season.txt');
>> C = textscan(fid,'%s %d %d %f %c')
C =
{5x1 cell} [5x1 int32] [5x1 int32] [5x1
double] [5x1 char]
>> C{1}
ans =
'Broncos'
'Falcons'
'Lions'
'Patriots'
'Vikings'
9
导入一般数据文件
>> s = importdata('train.wav')
s =
data,[12880x1 double]
fs,8192
>> sound(s.data,s.fs)
用 IMPORTDATA 命令可以读入文本文件和二进制文件,
它自动查找辅助函数来导入相应类型的文件 。
11
文件 I/O,低级例程F u n ctio n O p er atio n
fop en () op en fi l e
fcl os e() close f i l e
F u n c t i o n O p e r a t i o n
f w r i t e ( ) w r i t e b i n a r y d a t a
f p r i n t f ( ) w r i t e f o r m a t t e d d a t a
s p r i n t f ( ) w r i t e d a t a t o s t r i n g
Fu nctio n Op er ation
fr ead () read binary data
fscanf() read format ted data
fgetl () O R f gets() read comp let e l ine
sscan f( ) read str ing
Function Operation
ftell() get file position
fseek() go to file position
frewind() return to start of file
打开 /关闭:
定位:
读取:
写入:
>> help iofun
参考,File I/O Commands & Syntax
12
示例:低级文本文件 I/O
This is a square matrix
1 2 3
4 5 6
7 8 9
ASCII 文本文件,square_mat.txt
>> fid=fopen('square_mat.txt','rt');
>> title = fgetl(fid);
>> [data,count]=fscanf(fid,'%i');
>> data = reshape(data,3,3);
>> data_transpose = data';
>> fclose(fid);
>> fileio_ex
>> help fprintf
从文本文件读取数据,
>> fid = fopen('square_mat.txt','wt');
>> fprintf(fid,'%s\n','This is a square matrix');
>> fprintf(fid,'%i\t%i\t%i\n',[1 2 3; 4 5 6; 7 8 9]');
>> fclose(fid);
将数据写入文本文件:
13
示例:低级文本文件 I/O
创建一个使用文件 I/O 函数的脚本文件读取数据并在
MATLAB 命令行分析数据
开始之前,打开并查看数据文件 monthexpenses.txt,注意这个文件有头行和数据行
要求脚本文件应能:
把数据读到 MATLAB中
找出所列费用的平均数
找出所列费用的最大值
找出所列费用的总和,并得出每月要花费多少钱
>> edit monthexpenses.txt
14
解答:低级文本文件 I/O
fid=fopen(‘monthexpenses.txt','rt');
%Get the first three header lines
sent1=fgetl(fid);
sent2=fgetl(fid);
sent3=fgetl(fid);
%Alternate way of getting the first three header lines
% for i = 1:3
% fgetl(fid);
% end
numdata=fscanf(fid,'%i'); %Read in numerical data.
avg_exp=mean(numdata); %Find the average value.
high_exp=max(numdata); %Find the maximum value.
sum_exp=sum(numdata); %Find the sum of the data.
fclose(fid);;
>> expenses_soln
15
导入向导( Import Wizard)
>> uiimport
16
使用 Import Wizard 导入文本数据
>> uiimport
17
使用 (Import Wizard)导入二进制数据
>> uiimport
18
本章小结
高级例程
低级例程
导入向导 (Import Wizard)
参考,File I/O Commands & Syntax
MATLAB? 基础与编程入门
2
本章概述
高级例程
低级例程
导入向导参考,File I/O Commands & Syntax
3
SAVE 和 LOAD
load fname
load fname x y z
load fname data*
load fname -ascii
load fname -mat
文件 I/O,高级例程
save fname
save fname x y z
save fname data*
save fname -ascii
save fname -mat
save fname -v4
对类似的变量或文件名可使用 通配符
(*)
>> help iofun 参考,File I/O Commands & Syntax
4
示例:
保存及载入数据
>> clear all % Clear all variables
>> x = 5; x2 = 10; % Create x and x2
>> save xdata x % Save only x into xdata.mat
>> clear all % Clear all variables
>> load xdata % Load xdata.mat
>> whos % Note that x is back
Name Size Bytes Class
x 1x1 8 double array
Grand total is 1 element using 8 bytes
>> x % Still equals 5
x =
5
>> x2 = 10; % Recreate x2
>> save xdata x* % Now save using a wild card
>> clear all % Clear all variables
>> load xdata % Load xdata.mat
>> whos % Both variables were saved
Name Size Bytes Class
x 1x1 8 double array
x2 1x1 8 double array
Grand total is 2 elements using 16 bytes
5
MAT文件数据压缩
在 MATLAB 7中保存的 MAT文件默认具有压缩功能
例如:
>> A = ones(1000);
>> save A14.mat A
此时得到数据文件约占用 4KB的硬盘空间
在 MATLAB 6.5中完成同样的操作,则占据了约 977KB的硬盘空间
如果需要在早期版本 (MATLAB 6或者 6.5)打开 MATLAB 7
下保存的 MAT数据文件,则需要在保存文件时使用 -v6命令行开关
6
从使用分隔符的文件中读取数据
CSVREAD- 从文本文件中读取数据,该文本文件使用逗号分隔数值数据
DLMREAD-从文本文件中读取数据,该文本文件使用分隔符分隔数值数据
XLSREAD-从 Excel数据表中读取数据
尝试使用上述不同的函数分别读取下面的文件:
>> csvexamp.txt
>> dlmexamp.txt
>> xlsexamp.xls
7
>> [team,w,l,wp,playoff] = textread('season.txt','%s %d %d %f %c')
team =
'Broncos'
'Falcons'
'Lions'
'Patriots'
'Vikings'
w =
14
14
5
15
9
l =
2
...
读取具有一般结构形式的 ASCII 文本文件
支持 C语言函数 fscanf 的子集从文本文件中读取数据
8
从文本文件中读取数据
同样的操作也可以使用 textscan函数实现:
>> fid = fopen('season.txt');
>> C = textscan(fid,'%s %d %d %f %c')
C =
{5x1 cell} [5x1 int32] [5x1 int32] [5x1
double] [5x1 char]
>> C{1}
ans =
'Broncos'
'Falcons'
'Lions'
'Patriots'
'Vikings'
9
导入一般数据文件
>> s = importdata('train.wav')
s =
data,[12880x1 double]
fs,8192
>> sound(s.data,s.fs)
用 IMPORTDATA 命令可以读入文本文件和二进制文件,
它自动查找辅助函数来导入相应类型的文件 。
11
文件 I/O,低级例程F u n ctio n O p er atio n
fop en () op en fi l e
fcl os e() close f i l e
F u n c t i o n O p e r a t i o n
f w r i t e ( ) w r i t e b i n a r y d a t a
f p r i n t f ( ) w r i t e f o r m a t t e d d a t a
s p r i n t f ( ) w r i t e d a t a t o s t r i n g
Fu nctio n Op er ation
fr ead () read binary data
fscanf() read format ted data
fgetl () O R f gets() read comp let e l ine
sscan f( ) read str ing
Function Operation
ftell() get file position
fseek() go to file position
frewind() return to start of file
打开 /关闭:
定位:
读取:
写入:
>> help iofun
参考,File I/O Commands & Syntax
12
示例:低级文本文件 I/O
This is a square matrix
1 2 3
4 5 6
7 8 9
ASCII 文本文件,square_mat.txt
>> fid=fopen('square_mat.txt','rt');
>> title = fgetl(fid);
>> [data,count]=fscanf(fid,'%i');
>> data = reshape(data,3,3);
>> data_transpose = data';
>> fclose(fid);
>> fileio_ex
>> help fprintf
从文本文件读取数据,
>> fid = fopen('square_mat.txt','wt');
>> fprintf(fid,'%s\n','This is a square matrix');
>> fprintf(fid,'%i\t%i\t%i\n',[1 2 3; 4 5 6; 7 8 9]');
>> fclose(fid);
将数据写入文本文件:
13
示例:低级文本文件 I/O
创建一个使用文件 I/O 函数的脚本文件读取数据并在
MATLAB 命令行分析数据
开始之前,打开并查看数据文件 monthexpenses.txt,注意这个文件有头行和数据行
要求脚本文件应能:
把数据读到 MATLAB中
找出所列费用的平均数
找出所列费用的最大值
找出所列费用的总和,并得出每月要花费多少钱
>> edit monthexpenses.txt
14
解答:低级文本文件 I/O
fid=fopen(‘monthexpenses.txt','rt');
%Get the first three header lines
sent1=fgetl(fid);
sent2=fgetl(fid);
sent3=fgetl(fid);
%Alternate way of getting the first three header lines
% for i = 1:3
% fgetl(fid);
% end
numdata=fscanf(fid,'%i'); %Read in numerical data.
avg_exp=mean(numdata); %Find the average value.
high_exp=max(numdata); %Find the maximum value.
sum_exp=sum(numdata); %Find the sum of the data.
fclose(fid);;
>> expenses_soln
15
导入向导( Import Wizard)
>> uiimport
16
使用 Import Wizard 导入文本数据
>> uiimport
17
使用 (Import Wizard)导入二进制数据
>> uiimport
18
本章小结
高级例程
低级例程
导入向导 (Import Wizard)
参考,File I/O Commands & Syntax