matlab - 中读取文本文件

发布时间:2011-10-26 19:34:13

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==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,410); //大鹏之风

143143行,410410列的数据,当然也可以只读一个数据,如果你的matlab没有textread函数,直接从mathworks网站下载就行。

根据txt文档不同种类介绍不同的读取数据方法

转自:http://hi.baidu.com/youngbrave/blog/item/878db31fcd4f220f304e15bb.html

一、纯数据文件(没有字母和中文,纯数字)

对于这种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.cn

1 11 111 1111

2 22 222 2222

3 33 333 3333

4 44 444 4444

5 55 555 5555”

这样的文件怎么读入数据呢?

方法有多种,现举两个比较简单实用的。

方法一:

file/import data....../next/finish

>> 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 =

'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 3333

vib.hit.edu.cn

4 44 444 4444

5 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 % 如果是非数字继续下一次循环

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

Matlab中从文件夹中批量读取文件的做法

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)的矩阵 空缺的部分为 nan

file_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});

end

else

%%%%%%%%%%%%%-+-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-1

len=length(temp_read_data{i}{j});

if len

temp_read_data{i}{j}(len:max_row)=nan;

end

read_data{i}(j,:)=temp_read_data{i}{j};

end

fclose(fid);

end

end

matlab - 中读取文本文件

相关推荐