Bootstrap

matlab 文件操作

1. 打开 fopen

打开文件或者得到文件打开的信息

f=fullfile('D:','Matlab','example.txt');
fid=fopen(f);  %打开文件,fid=-1表示打开文件失败;fid=1表示输出stdout;fid=2 表示错误信息文件;
			   %fid=其他正数表示文件打开成功,并返回文件编号。(fid=1,2不需打开)
fid=fopen(f,'r');  %以读(r)的方式打开文件;打开方式有:r,  w,  a,  r+,  w+,  a+,  A,  W
[fid,message]=fopen(filename,  mode,  machineformat);

2. 关闭 fclose

关闭一个或者多个文件

fclose(fid);
fclose(‘all’); 

3. 读取 load

用于读数值型文件,并且无须打开文件,但是要求文件中的内容所有行的列数相同

f=fullfile('D:','Matlab','example.txt');  
A=load(f)    %返回以f为路径的文件的内容 

4. 读取 fread

用于读取文件中的内容,返回的是ASCII码,可指定返回字节数和返回的格式

f=fullfile('D:','Matlab','example.txt');
fid=fopen(f, 'r');  
a=fread(fid);  %读取文件全部内容,返回的是每个字节的ASCII码

b=fread(fid,5);  %读取文件中的前5个字符返回的是这5个字节的ASCII码  
c=fread(fid,5,  'uint8=>char');  %读取文件中前5个字符并以字符char格式返回  
d=fread(fid,'*char');    %读取文件中全部内容并以字符串的格式返回  (a,b,c,d每句是一个单独语句与其他语句无关)
e1=fread(fid,5,'*char');  %读取文件中前5个字符并以字符串的格式返回
e2=fread(fid,8,'*char');  %读取fid指向位置开始后面的8个字符并以字符串的格式返回(e2与e1一起使用时)
fclose(fid)

5. 读取 fscanf

用于读取文件中指定格式的内容,可指定读取的字节数,返回的内容存放至一维数组

f=fullfile('D:','Matlab','example.txt'); 
fid=fopen(f, 'r');
a=fscanf(fid,'%d');  %读取文件中的所有数字,返回到数组a中
[a,count]=fscanf(fid,'%d',5);  %读取文件中fid指向位置开始后面的5个数字,返回到数组a中;
							   %count返回a的大小,count<=5(返回的数字个数可能小于要求读取的个数)
fclose(fid)

A=fscanf(fid,format)
[A,count]=fscanf(fid,format,size)
[A,count]=fscanf(fid,format,size)

data = fscanf(fid,format,size);

data : 读取内容的数组。大小由size决定

fid : fopen打开文件的返回值

size : [m n]的向量,m为行,n为列 (按列优先排列),若n取 inf 表示读到文件末尾。例:data[2, 3]即为2行3列;如果size为[4inf],则data为4行n列、且data数据先按列填满4个后再换一列。

format : 格式化参数(像printf、scanf),format 包含txt内所有类型,%*d表示省略整型数据,例子一:

% test.txt
0.00    good 2
0.10    bot  3
1.02    yes  4
1.00    yes  5
1.00    yes  6
1.00    yes  3
1.00    yes  5
1.00    yes  6
1.00    yes  1
1.00    yes  3
1.00    yes  7
1.00    yes  3
1.00    yes  2

fid =fopen('.\test.txt', 'r');
a = fscanf(fid,'%f    %*s %d ', [2 inf])   % It has two rowsnow.
fclose(fid)

一列和二列间有四个空格,format也需有四空格;有三列即三种类型,要有三种format,%*s即为不输出字符串型。结果:

a = Columns 1 through 11
0   0.1000   1.0200   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000   1.0000
2.0000   3.0000   4.0000   5.0000   6.0000   3.0000   5.0000   6.0000   1.0000   3.0000   7.0000
    Columns 12 through 13
1.0000   1.0000
3.0000   2.0000

例子二:

% moon.txt
13, 1, 3.4
3, 2.1, 23
1, 12, 2
4, 5.4, 6

% 读取moon中的数据存在一个数组里
fid=fopen(‘d:\moon.txt’);
data=fscanf(fid,%f,%f,%f’,[3,inf]);%这里得用单引号
fclose(fid);

13 3 1 4
1 2.1 12 5.4
4 23 26 

当需要用引用数组中的某行或某列来画图,方法是data(m,:) 或 data(:,n),即取得data数组的第m行或第n列。

6. 读取 fgetl

用于读取文件中一行内容,不包括换行符

f=fullfile('D:','Matlab','example.txt');  
fid  =  fopen(f,  'r');  
tline=fgetl(fid); %从文件中读取fid指向的一行内容
fclose(fid)

7. 读取 fgets

用于读取文件中一行内容(包括换行符),只能用于文本文件

f=fullfile('D:','Matlab','example.txt'); 
fid  =  fopen(f,  'r');  
tline=fgets(fid);    %返回文件标识符指向的一行  
tline=fgets(fid,nchar);    %返回文件标识符指向的一行的最多nchar个任何字符  
fclose(fid)

8. 写入 fwrite

用于将二进制数据写入文件中

fwrite(fid,magic(5),'integer*4');    %创建一个二进制文件,由25个4位integer类型的元素组成的5*5的矩阵
fclose(fid)

9. 设定 fprintf

用于将指定格式数据写入到文件中

x  =  0:.1:1;  %从0到1以0.1为单位建立一个矩阵
y  =  [x;  exp(x)];
f=fullfile('D:','Matlab','example.txt'); 
fid  =  fopen(f,'w');
fprintf(fid,'%6.2f  .8f\n',y);    %将矩阵y写入文件中,规定了写入格式
fclose(fid)

10. 设定 fseek

用于对文件指针位置的设定

f=fullfile('D:','Matlab','example.txt');  
fid  =  fopen(f,'r');  
fseek(fid,  19,  'bof');  
A  =  fscanf(fid,%d’,5);
fclose(fid) 

11. 获取 ftell

用于得到文件指针位置

f=fullfile('D:','Matlab','example.txt');  
fid  =  fopen(f,'r');  
fseek(fid,0,’eof’);  
position=ftell(fid);  
fclose(fid) 

12. 查询 ferror

用于查询关于文件错误的输入或者输出

f=fullfile('D:','Matlab','example.txt');  
fid=fopen(f,'r');
message1=ferror(fid);    %返回错误信息
message2=ferror(fid,’clear’) %返回错误信息并清空
fclose(fid) 

13. 判断 feof

用于判断是不是文件末尾

f=fullfile('D:','Matlab','example.txt');  
fid=fopen(f,'r');  
while  ~feof(fid)  
	tline=fgetl(fid);  
	printf(tline);  
end
fclose(fid)

14. 文件查找 dir(a)

用于查询关于a的文件信息,a是文件夹或文件名

dir(‘fk’),表示查询当前路径上名为 fk 的文件或文件夹
若 fk 不存在,则返回

fk not found.

否则返回相应信息:

1.hdr  ki     ku (表示 fk 是一个文件夹,其中还包含有1.hdr,ki 和 ku 等文件和文件夹).
还可以查找特定后缀的文件: 如:dir(['fk\','*.jpg'])表示查找 fk文件夹下后缀为 ' .jpg' 的文件
若存在后缀为'.jpg' 的文件,则返回文件名:ABC.jpg; 否则返回:fk.\*.jpg not found.



15. 创建 mkdir

用于创建文件夹

mkdir(' fj '% 表示在当前路径创建名为 fj 的文件夹
mkdir(' fj\fi '%表示在当前路径下的 fj 文件夹里创建 fi 子文件夹

16. 删除 rmdir

用于删除文件夹

rmdir('fl'%表示删除当前路径下名为 fl 的文件夹
rmdir('fl', 's') %表示删除非空文件夹

17. 删除 delete

用于删除文件

delete(filename)	% 删除一个文件
delete('*.后缀')	% 删除一类文件

18. 文件移动和复制

movefile('a.txt' , 'b.txt' );   % 把1.txt剪切成11.txt(1.txt不存在了),实际上相当于改名 
copyfile('c.txt', 'd.txt');    %把c.txt复制成d.txt(c.txt依旧存在)

movefile('a.txt', aDir);   %把a.txt剪切到文件夹aDir中
copyfile('c.txt', bDir);    %把c.txt复制到文件夹bDir中
;