frogfish 发表于 2005-8-18 10:18

[转帖]matlab中常见txt文件读入的实用方法

文件内容形式一(假定文件名为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'
方法二:
=textread('test1.txt','%s%s%s%s','headerlines',4)
说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。
这里%s的个数和对应。
>> =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'
因以字符串的形式读入,所以有''。

[ 本帖最后由 xuebx 于 2006-9-8 14:33 编辑 ]

frogfish 发表于 2005-8-18 10:18

文件内容形式二(假定文件名为test2.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('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

心灯 发表于 2005-8-18 12:55

形式二文件的读取,挺不错,赞其构思~~~~

linqus 发表于 2005-8-19 19:44

俺一般将数据存成文本,用load导入,再操作。
如:
load qq.dat;
plot(qq(:,1),qq(:,2))
等等,
比较崩的,:)
楼主的好

suffer 发表于 2005-8-21 09:08

自己写的程序我也一边用load
不过很多软件算出来的就load不进来了

冬小麦 发表于 2005-11-3 15:22

呵呵!谢过了!刚刚开始学习matlab,正好用得上!

jiangping 发表于 2006-1-2 10:55

刚刚学,运行由chinamaker编写的程序时,输出Empty state-space model.不知为什么,请教

换了一台电脑运行由chinamaker编写的程序时,输出:
??? Index exceeds matrix dimensions.
Error in ==> C:\Documents and Settings\user\桌面\aa.m
On line 5 ==> if double(tline(1))>=48&&double(tline(1))<=57 % 判断首字符是否是数值
这是什么原因?请教

[ 本帖最后由 ChaChing 于 2010-4-17 23:44 编辑 ]

happy 发表于 2006-1-2 11:44

test2.txt文件你放在哪里?

[ 本帖最后由 ChaChing 于 2010-4-18 00:00 编辑 ]

jiangping 发表于 2006-1-2 15:38

和由chinamaker编写的程序放在一个文件夹。这个文件夹设为current directory

happy 发表于 2006-1-3 12:14

fopen的时候给出test2.txt的路径

jiangping 发表于 2006-1-4 20:49

我是新手,不是很明白你的意思,能具体点吗?happy

annachen 发表于 2006-2-21 13:28

你的qq.dat是怎么制作的,能举一个例子吗?

annachen 发表于 2006-2-21 13:38

>> MK=importdata('test1.txt')
MK=importdata('test1.txt')
MK =
data:
textdata: {4x1 cell}
>> data
??? Undefined function or variable 'data'.
为什么会出现错误而不能正确显示呢?

tirfan 发表于 2006-3-8 09:13

我也试着运行了chinamaker编写的程序,也出现了楼上的问题,
??? Attempted to access tline(1); index out of bounds because numel(tline)=0.

Error in ==> Untitled8 at 5
if double(tline(1))>=48&&double(tline(1))<=57
请高手帮忙解答。非常感谢

happy 发表于 2006-3-8 15:16

比如说你的test2.txt放在d:\data目录下,那么第一句改为fidin=fopen('d:\data\test2.txt');
页: [1] 2
查看完整版本: [转帖]matlab中常见txt文件读入的实用方法