加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

文件I/O学习心得

(2008-06-23 12:07:39)
标签:

引用请注明出处

杂谈

分类: MATLAB编程篇

1.入门:
(1)创建M文件:
function fileinfo(file)
[pathstr,name,ext,versn] = fileparts(file);
if name=='fileinfo'
disp('This is the target file')
else
disp('This is not the target file')
end

if ext==strcat('.','xls')
disp('This is a excel file')
else
disp('This is not a excel file')
end
(2)应用上面的M文件:
>> file='\home\smartchen\matlab\filenifo.xls';
>> fileinfo(file)
This is not the target file
This is a excel file
>> file='\home\smartchen\matlab\fileinfo.txt';
>>  fileinfo(file)
This is the target file
This is not a excel file
>> file='\home\smartchen\matlab\filenifo.xls';
>> [pathstr,name,ext,versn]=fileparts(file); %可以用来产生文件部分信息,pathstr文
%件路径,name文件名,ext文件后辍,versn文件版本
>> filecontr=fullfile(pathstr,[name ext versn]); %创建文件路径,前面参数是文件的路径,最后一个

参数是文件名称,如果该文件不包含后辍,则创建的完整路径也不包含后辍.
>> pathstr
pathstr =
\home\smartchen\matlab
>> name
name =
filenifo
>> ext
ext =
.xls
>> filecontr
filecontr =
\home\smartchen\matlab\filenifo.xls

2.打开和关闭文件
(1)打开文件
格式:[fid,message]fopen(filename,mode)
[fid,message]fopen(filename,mode,machineformat)

finename表示的是打开文件的名称,mode表示打开文件的方式,具体类型如下:
"r":以只读方式打开文件
"w",以只写方式打开文件,并覆盖原来的内容
"a",增补文件,在文件尾部增加数据
"r+",读写文件
"w+",创建一个新文件或者删除已有的文件内容,并进行读写操作
"a+",读取和增补文件.
例如:[fid,message]=fopen('E:\GUI\文件IO\filename.txt','w')

默认情况下,MATLAB会选择使用二进制的方式打开文件,而在该方式下,字符串不会被特殊处理,

fid被称为文件标识.数值没有太大意义,一般是由系统自动获取的必须仔细查看或者打开进行处理,只需查

看fid数值是否为-1即可,为-1不能打开对应的文件.

(2)关闭文件
>> [fid,message]=fopen('fget1.m','w');
>> delete fget1.m
Warning: File not found or permission denied
上面结果表明,如果在关闭该文件前,直接删除文件,系统会提示用户删除命令被拒绝

首先应关闭文件,然后删除该文件,例如:
>> status=fclose(fid);
>> delete fget1.m
>> [fid,message]=fopen('fget1.m','r+')
fid =
    -1
message =
No such file or directory

调用格式如下:
status=fclose(fid)
status=fclose('all')
上面的命令,fid表示使用fopen命令得到的文件标识参数,第二个命令表示使用命令删除所有已经打开的文

件.如果使用该命令得到的结果status=0,则表示关闭文件的操作成功;否则得到的结果status=-1.


3.处理二进制文件
(1)读取M文件
常见的二进制文件包括.m、.dat等。
已经有一个ball.m文件
>> [fid,message]=fopen('ball.m','r+');
>> data=fread(fid);
>> whos data
  Name       Size                    Bytes  Class

  data    2479x1                     19832  double array

Grand total is 2479 elements using 19832 bytes

>> data
data =
    37
    32
   ...

>> disp(char(data'))
% Script file ball.m
% Purpose:
conv=pi/180; 
grav=-9.82
  ...
(2)读取TXT文件
读取二进制文件的命令fread,调用格式如下:
A=fread(fid,count,precision)
  上面的命令中,参数 fid表示使用fopen命令打开的文件标识,参数count表示读取二进制文件的大小,可

以选取正面三个参数。
  n:读取前面个整数,并写入一个向量中。
  inf:读取文件,起到文件结尾处。
  [m,n]:读取数据到m*n的矩阵中,按照列排列,n可以是inf,但是m不能是inf。
  最后一个参数precision用来控制二进制转换成为MATLAB矩阵时的精度,具体的精度参数请用户查看相

应的帮助文件。
  应用举例(本例中,readtxt.txt是文本文件,其中内容包含下面的字母文字:this is a txt file):
  a.读取readtxt.txt文件的内容:
>> fid=fopen('readtxt.txt','r');
>> data=fread(fid)

data =

   116
   104
   ...%省略
  b.读取readtxt.txt文件的部分内容:
>>  fid=fopen('readtxt.txt','r');
>> c=fread(fid,5)

c =

   116
   104
   105
   115
    32
其中5表示的是选择前5个数值内容。
  c.读取readtxt.txt文件的部分文本内容:
>>  fid=fopen('readtxt.txt','r');
>> c=fread(fid,'*char');
>> sprintf(c)

ans =

this is a txt file
  d.处理readtxt.txt文件的部分文本内容:
>>  fid=fopen('readtxt.txt','r');
>> c1=fread(fid,5,'*char');
>>  c2=fread(fid,3,'*char');
>>  c3=fread(fid,2,'*char');
>>  c4=fread(fid,4,'*char');
>>  c5=fread(fid,5,'*char');
>> sprintf('%c',c1,'*',c2,'*',c3,'*',c4,'*',c5)

ans =

this *is *a *txt *file

(3)写入二进制文件
可以使用fwrite命令来完成这样的任务。
>> fid=fopen('magic5.txt','wb');
>> fwrite(fid,magic(5),'int32');
>> fid=fopen('magic5.txt','r');
>>data=fread(fid,[5,5],'int32');
>> A=data';
>> A

A =

    17    23       10    11
    24          12    18
          13    19    25
       14    20    21     2
    15    16    22        9

>> magic(5)

ans =

    17    24          15
    23          14    16
          13    20    22
    10    12    19    21     3
    11    18    25        9

可以看出,首先创建一个空白的二进制文件,然后将MATLAB中创建的Magic矩阵读入该文件后,再打开该

文件,阅读该文件的内容。

 

4.处理文本文件:
(1)使用csvwrite读入文本文件:
a.使用csvwrite命令向文本文件写入MATLAB的数据:
>> fid=fopen('cavlist.dat','wb');
>> m=[3 6 9 12 15;5 10 15 20 25;7 14 21 28 35;11 22 33 44 55];
>>csvwrite('cavlist.dat',m);
>> type cavlist.dat

3,6,9,12,15
5,10,15,20,25
7,14,21,28,35
11,22,33,44,55

b.将数据写cavlist文本文件中,并在数据列的前侧添加4个数据列,同时在数据列上方添加2个数据行:
>> csvwrite('cavlist.dat',m,2,4)
>>type cavlist.dat

,,,,,,,,
,,,,,,,,
,,,,3,6,9,12,15
,,,,5,10,15,20,25
,,,,7,14,21,28,35
,,,,11,22,33,44,55

(2)使用dimwrite命令读入文本文件
a.将数据写入myfile文本文件中:
>> fid=fopen('myfile.txt','wb');
>> m=rand(6);
>> dlmwrite('myfile.txt',m,'delimiter','\t','precision',5);
>> type myfile.txt

0.84622 0.68128 0.30462 0.15087 0.49655 0.34197
0.52515 0.37948 0.18965 0.6979 0.89977 0.28973
0.20265 0.8318 0.19343 0.37837 0.82163 0.34119
0.67214 0.50281 0.68222 0.86001 0.64491 0.53408
0.83812 0.70947 0.30276 0.85366 0.81797 0.72711
0.01964 0.42889 0.54167 0.59356 0.66023 0.30929

(3)读取文本文件
a.用csvread和dlmread命令来读取文本文件
>> fid=fopen('cavlist.dat','wb'); %建立文本
>> m=[3 6 9 12 15;5 10 15 20 25;7 14 21 28 35;11 22 33 44 55];
>> csvwrite('cavlist.dat',m);%写入文本
>> m1=csvread('cavlist.dat');%下面皆是读文本
>> m2=csvread('cavlist.dat',2,0);
>> m3=csvread('cavlist.dat',2,0,[2,0,3,3]);
>> m4=dlmread('cavlist.dat');
>> m1

m1 =

             12    15
       10    15    20    25
       14    21    28    35
    11    22    33    44    55

>> m2

m2 =

       14    21    28    35
    11    22    33    44    55

>> m3

m3 =

       14    21    28
    11    22    33    44

>> m4

m4 =

             12    15
       10    15    20    25
       14    21    28    35
    11    22    33    44    55

b.在MATLAB中使用textread命令来读取文本文件
txtlist2内容:sally level1 12.34 45 yes
>> fid=fopen('txtlist2','r');
>> [name,types,x,y,answer]=textread('txtlist2.txt','%s %s %f %d %s',1)

name =

    'sally'


types =

    'level1'


x =

   12.3400


y =

    45


answer =

    'yes'


                         参考文献:陈杰. MATLAB宝典. 电子工业出版社,2006,817-839

0

阅读 收藏 喜欢 打印举报/Report
前一篇:Simulink初级
后一篇:避免使用循环
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有