matlab对文件的操作

时间:2023-02-16 16:41:41
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
用于读取文件中的内容,需要和fopen,  fclose配合使用,返回的是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
用于读取文件中指定格式的内容,需要和fopen,  fclose配合使用,可以指定读取的字节数,返回的内容存放到一个一维数组中。例如:
>>  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决定,即如果size为2行3列,data即为【2,3】,如果size为[4inf],则data为4行n列,而且data数据先按列填满4个,之后再换一列size是一个[m n]的向量,

m为行,n为列(注意,这里读取的顺序是按列优先排列的,不明白的话可以看

下面的例子),若ninf表示读到文件末尾。fidfopen打开文件的返回值,

format是格式化参数(像printfscanf)。

format包含txt内所有类型,%*d表示省略整型数据,例如

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('E:\temp\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


 fid = fopen('E:\temp\test.txt', 'r');

a = fscanf(fid, '%f    %*s %*f', 5)    % It has two rowsnow.

fclose(fid)


a =


    5.0000

    0.1000

    1.0200

    1.0000

    1.0000

举个小例子2:

路径+文件名:d:\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);

这时data中的数据如下:

13 3 1 4

1 2.1 12 5.4

4 23 26 

通常我们可能需要用引用数组中的某行或某列来画图,方法是data(m,:)或者data(:,n),即取得data数组的第m行或第n列。

6、  fgetl
用于读取文件中一行内容,不包括换行符,需要和fopen,  fclose配合使用。例如:  >>  f=fullfile('D:','Matlab','example.txt');  >>  fid  fopen(f,  'r');  >>tline=fgetl(fid); 
%从文件中读取fid指向的一行内容
>>fclose(fid)

7、  fgets
用于读取文件中一行内容,包括换行符,需要和fopen,fclose配合使用。(只能用于文本
文件)例如:
>>  f=fullfile('D:','Matlab','example.txt');  >>  fid  fopen(f,  'r');  >>tline=fgets(fid);    %返回文件标识符指向的一行  >>tline=fgets(fid,nchar);    %返回文件标识符指向的一行的最多nchar个任何字符  >>fclose(fid)

8、  fwrite
用于将二进制数据写入文件中,需要和fopen,fclose配合使用。例如:  >>  f=fullfile('D:','Matlab','example.txt');  >>  fid  fopen(f,  'wb');
>>fwrite(fid,magic(5),'integer*4');    %创建一个二进制文件,由25个4位integer类型
的元素组成的5*5的矩阵
>>fclose(fid)

9、  fprintf
用于将指定格式数据写入到文件中,需要和fopen,fclose配合使用。例如:  >>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)

  fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:

  数据的格式化输出:fprintf(fid, format,variables)

  按指定的格式将变量的值输出到屏幕或指定文件

  fid为文件句柄,若缺省,则输出到屏幕

    1for standard output (the screen) or 2 for standard error. If FID isomitted, output goes to the screen.

  format用来指定数据输出时采用的格式

    %d整数

    %e实数:科学计算法形式

    %f实数:小数形式

    %g由系统自动选取上述两种格式之一

    %s输出字符串

fprintf(fid,format,A)
说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。
例6.9创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。
>>a='string';
>>fid=fopen('d:\char1.txt','w');
>>fprintf(fid,'%s',a);
>>fclose(fid);
>>fid1=fopen('d:\char1.txt','rt');
>>fid1=fopen('d:\char1.txt','rt');
>>b=fscanf(fid1,'%s')
b =
string

matlab读txt文件

fid=fopen('fx.txt','r');
%得到文件号
[f,count]=fscanf(fid,'%f%f',[12,90]);
%把文件号1的数据读到f中。其中f是[1290]的矩阵
%这里'%f%f'表示读取数据的形势,他是按原始数据型读出
fclose(fid);
%关闭文件
另外有的txt文件还可以用load来打开
其语句为
f=load('fx.txt)



10、fseek


用于对文件指针位置的设定,需要和fopen,fclose配合使用。例如:  >>  f=fullfile('D:','Matlab','example.txt');  >>fid  fopen(f,'r');  >>fseek(fid,  19,  'bof');  >>A  fscanf(fid,’%d’,5);
>>fclose(fid) 

11、  ftell
用于得到文件指针位置,需要和fopen,fclose配合使用。例如:  >>  f=fullfile('D:','Matlab','example.txt');  >>fid  fopen(f,'r');  >>fseek(fid,0,’eof’);  >>position=ftell(fid);  >>fclose(fid)

12、  ferror
用于查询关于文件错误的输入或者输出,需要和fopen,fclose配合使用。例如:  >>  f=fullfile('D:','Matlab','example.txt');  >>fid  fopen(f,'r');
>>message1=ferror(fid);    %返回错误信息
>>message2=ferror(fid,’clear’)
%返回错误信息并清空
>>fclose(fid) 

13、  feof
用于判断是不是文件末尾,需要和fopen,fclose配合使用。例如:  >>  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' 的文件
若 fk 目录下存在后缀为'.jpg' 的文件,则返回文件名:1260500466587.jpg     1260500472025.jpg     8673601d.jpg
否则返回:fk.\*.jpg not found.

15、文件夹创建
mkdir(' fj '):用于创建文件夹
如:mkdir(' fj '), 表示在当前路径创建名为 fj 的文件夹
        mkdir(' fj\fi ')则表示在当前路径下的 fj 文件夹里创建 fi 子文件夹

16、文件夹删除
rmdir(' fl '):用于删除文件夹
如:rmdir('fl'),表示删除当前路径下名为 fl 的文件夹
       rmdir('fl', 's'),表示删除非空文件夹

17、文件删除
删除一个文件: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中