下面这个函数是取filein中的第line行写入fileout中的程序,如果想实现取特定几行,只要稍微修改一下就可以。
function dataout=dataread(filein,fileout,line)fidin=fopen(filein,'r');
fidout=fopen(fileout,'w');
nline=0;
while ~feof(fidin) % 判断是否为文件末尾tline=fgetl(fidin); % 从文件读行
nline=nline+1; if nline==line
fprintf(fidout,'%s\n',tline);dataout=tline;
end
end
fclose(fidin);fclose(fidout);
%%%%%%%%%%%%%%%%%%%%%%%%%% 调用格式:dataout=dataread(filein,fileout,line) 如果你的txt文件数据是矩阵形式的,而没有其它的文字,用下面的程序就可以读任意行任意列的数据 a=textread('ll.txt'); t=a(1:43,4:10); 1:43是1到43行,4:10是4到10列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行
一、纯数据文件(没有字母和中文,纯数字)
对于这种txt文档,从matalb中读取就简单多了
例如test.txt文件,内容为“17.901 -1.1111 33.045
17.891 -1.1286 33.045 17.884 -1.1345 33.045”可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test的数据文件。
二、中英文和数据如test1.txt
“你好欢迎来到振动论坛vib.hit.edu.cn1 11 111 11112 22 222 22223 33 333 33334 44 444 44445 55 555 5555”这样的文件怎么读入数据呢?方法有多种,现举两个比较简单实用的。 方法一:file/import data....../next/finish >> whosName Size Bytes Classdata 5x4 160 double array
textdata 4x1 300 cell arrayGrand 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 =
'你好'
'欢迎来到' '振动论坛' 'vib.hit.edu.cn' 方法二:[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'因以字符串的形式读入,所以有''。————————————————————————————————三、中文 数据 英文 混乱如test.txt
你好
1 11 111 1111欢迎来到2 22 222 2222振动论坛3 33 333 3333vib.hit.edu.cn4 44 444 44445 55 555 5555说明:这种内容格式的文件用上面的方法是不行的。
以下是由chinamaker编写的一种方法:
fidin=fopen('test.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 % 如果是非数字继续下一次循环 endendfclose(fidout);MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来 >> MKMK =
1 11 111 1111
2 22 222 2222 3 33 333 3333 4 44 444 4444 5 55 555 5555
from: