matlab下面这个函数是取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==linefprintf(fidout,'%s\n',tline);dataout=tline;endendfclose(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文档不同种类介绍不同的读取数据方法转自:/youngbrave/blog/item/878db31fcd4f220f304e15bb.html一、纯数据文件(没有字母和中文,纯数字)对于这种txt文档,从matalb中读取就简单多了例如test.txt文件,内容为“17.901 -1.1111 33.04517.891 -1.1286 33.04517.884 -1.1345 33.045”可以在command window中输入load test.txt ,然后就会产生一个test的数据文件,内容跟test.txt中的数据一样;另一种方法是在file/import data....../next/finish 也可产生一个叫test 的数据文件。
二、中英文和数据如test1.txt“你好欢迎来到振动论坛1 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 array Grand total is 54 elements using 460 bytes>> datadata =1 11 111 11112 22 222 22223 33 333 33334 44 444 44445 55 555 5555>> textdatatextdata ='你好''欢迎来到''振动论坛'''方法二:[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 33334 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.txtcontinue % 如果是非数字继续下一次循环endendfclose(fidout);MK=importdata('MKMATLAB.txt'); % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来>> MKMK =1 11 111 11112 22 222 22223 33 333 33334 44 444 44445 55 555 5555Matlab中从文件夹中批量读取文件的做法function [read_data]=batch_read_file(file_type);% <<---文件已完成,程序已修正--->>% 可以读取的文件中,若有列数不相同的,则补nan% 数据文件中只能是数字% *.xls 文件只能是英文或数字命名% 批量读数据的程序注,只能读取*.txt类文件,且文件必须有后缀名% [read_data_A]=batch_read_file('*.txt')% [read_data_A]=batch_read_file('*.xls')% file_type为文件的格式% 返回值read_data 为元胞数值,保存谋取到的数据% 对xls 文件的说明:% xls 文件以文件名升序排序% xls 文件只能容许一个工作表,若有多个,则读取的为名字值最大的一个工作表% file_type='*.txt'类or file_type='*.xls';% 示例:在数据文件中有如下内容1.txt% 1 2 3.345 1234.5422 12% 1.2222 2.3333 3.4444% 1 2 3 4 5 6 7 8 9% 读出的数据是一个(3,9)的矩阵空缺的部分为nanfile_read=dir(file_type);% 获得要读取的文件列表%%%%%%%%%%%%%-+-XLS XLS XLS XLS XLS-+-%%%%%%%%%% 在此段读取*.xls 类文件if strcmp(file_type,'*.xls')for i=1:length(file_read)file_name{i}=file_read(i).name;% 获取文件名的列表% 开始准备向从xls 文件中读取数据read_data{i}=xlsread(file_name{i});endelse%%%%%%%%%%%%%-+-TXT TXT TXT TXT TXT-+-%%%%%%%%% % 在此段读取*.txt 类文件for i=1:length(file_read)file_name{i}=file_read(i).name;fid=fopen(file_name{i},'r');% 开始准备向从文件中读取数据k=1;while ~feof(fid)% 这儿用fgetl似乎也没有错temp=fgets(fid);length_temp_data(k)=length(str2num(temp));% 求长度temp_read_data{i}{k}=str2num(temp);% 写%%%%%%%%k=k+1;end%%-----max_row=max(length_temp_data);% 求最大的长度,以确定补nan 的个数%%%%%%for j=1:k-1len=length(temp_read_data{i}{j});if len<max_rowtemp_read_data{i}{j}(len:max_row)=nan;endread_data{i}(j,:)=temp_read_data{i}{j};endfclose(fid);endend。