| 
 
	积分128贡献 精华在线时间 小时注册时间2012-11-21最后登录1970-1-1 
 | 
 
| 
如何读取特定规则的文本中的数据呢?
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  假定名为 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
 "
 这样的文件怎么读入数据呢?
 方法有多种,现举两个比较简单实用的。
 
 方法一:
 A=importdata(file,space,line)
 其中,file是所读取的文件名,space是特定的分隔符,line是一个数字,指文本中字符串文字的行数,如上文的数据中line=4。
 此代码的含义是,line行是title,line+1行到end是数据,按特定分隔符space读取数据。此方法可以读取文本在上和数据在下的文件。
 A是一个sturct,其中A.data就是所需的数据了。
 exapmle:
 A=importdata('test.txt',' ',4);%运行即可取得数据A.data
 
 此方法也可以按以下操作获取:
 在文件菜单中选择 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可以是其他形式,跟读入的数据类型有关,比如这里也可以用%d,%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
 
 
 
 
 | 
 |