Tuesday, July 17, 2012

matlab 中如何读取文本文件

假定名为 test.txt 的文件中以下为文件内容 

你好,我的数据 
欢迎来到 
百思论坛 
www.baisi.net 
1 11 111 1111 
            2 22 222 2222       
3 33 333 3333 
4 44 444 4444 
            5 55 555 5555       

这样的文件怎么读入数据呢? 
方法有多种,现举两个比较简单实用的。 

方法一: 

在文件菜单中选择 file/import data,按照提示进行操作至结束。 
 command 窗口中输入 
>> whos 
Name           Size                   Bytes  Class 

data           5x4                      160  double array 
textdata       4x1                      300  cell array 

Grand total is 54 elements using 460 bytes 

>> data 

data = 

          1          11         111        1111 
          2          22         222        2222 
          3          33         333        3333 
          4          44         444        4444 
          5          55         555        5555 

>> textdata 

textdata = 

   '你好
   '欢迎来到
   '百思论坛
   'www.baisi.net' 

方法二: 

[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4) 
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。 
这里%s的个数和[a1,a2,a3,a4]对应。 
>> [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4) 

a1 = 

   '1' 
   '2' 
   '3' 
   '4' 
   '5' 


a2 = 

   '11' 
   '22' 
   '33' 
   '44' 
   '55' 


a3 = 

   '111' 
   '222' 
   '333' 
   '444' 
   '555' 


a4 = 

   '1111' 
   '2222' 
   '3333' 
   '4444' 
   '5555' 
因以字符串的形式读入,所以有'' 

文件内容形式二(假定文件名为test2.txt): 

你好 
1 11 111 1111 
欢迎来到 
            2 22 222 2222       
百思论坛 
3 33 333 3333 
www.baisi.net 
4 44 444 4444 
            5 55 555 5555       

说明:这种内容格式的文件用上面的方法是不行的。 

以下是由chinamaker编写的一种方法: 
fidin=fopen('test2.txt');                               % 打开test2.txt文件              
fidout=fopen('mkmatlab.txt','w');                       % 创建MKMATLAB.txt文件 
while ~feof(fidin)                                      % 判断是否为文件末尾                
   tline=fgetl(fidin);                                 % 从文件读行    
   if double(tline(1))>=48&&double(tline(1))<=57       % 判断首字符是否是数值 
      fprintf(fidout,'%s\n\n',tline);                  % 如果是数字行,把此行数据写入文件MKMATLAB.txt 
      continue                                         % 如果是非数字继续下一次循环 
   end 
end 
fclose(fidout); 
MK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来 
>> MK 

MK = 

          1          11         111        1111 
          2          22         222        2222 
          3          33         333        3333 
          4          44         444        4444 
          5          55         555        5555

No comments:

Post a Comment