声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 17214|回复: 27

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

[复制链接]
发表于 2005-8-18 10:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
文件内容形式一(假定文件名为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'
因以字符串的形式读入,所以有''。

[ 本帖最后由 xuebx 于 2006-9-8 14:33 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 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

评分

1

查看全部评分

发表于 2005-8-18 12:55 | 显示全部楼层
形式二文件的读取,挺不错,赞其构思~~~~
发表于 2005-8-19 19:44 | 显示全部楼层
俺一般将数据存成文本,用load导入,再操作。
如:
load qq.dat;
plot(qq(:,1),qq(:,2))
等等,
比较崩的,:)
楼主的好[em01]
发表于 2005-8-21 09:08 | 显示全部楼层
自己写的程序我也一边用load
不过很多软件算出来的就load不进来了
发表于 2005-11-3 15:22 | 显示全部楼层
呵呵!谢过了!刚刚开始学习matlab,正好用得上!
发表于 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 编辑 ]
发表于 2006-1-2 11:44 | 显示全部楼层
test2.txt文件你放在哪里?

[ 本帖最后由 ChaChing 于 2010-4-18 00:00 编辑 ]
发表于 2006-1-2 15:38 | 显示全部楼层
和由chinamaker编写的程序放在一个文件夹。这个文件夹设为current directory
发表于 2006-1-3 12:14 | 显示全部楼层
fopen的时候给出test2.txt的路径
发表于 2006-1-4 20:49 | 显示全部楼层
我是新手,不是很明白你的意思,能具体点吗?happy
发表于 2006-2-21 13:28 | 显示全部楼层
你的qq.dat是怎么制作的,能举一个例子吗?
发表于 2006-2-21 13:38 | 显示全部楼层
>> MK=importdata('test1.txt')
MK=importdata('test1.txt')
MK =
data: [5x4 double]
textdata: {4x1 cell}
>> data
??? Undefined function or variable 'data'.
为什么会出现错误而不能正确显示呢?
发表于 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
请高手帮忙解答。非常感谢
发表于 2006-3-8 15:16 | 显示全部楼层
比如说你的test2.txt放在d:\data目录下,那么第一句改为fidin=fopen('d:\data\test2.txt');

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 19:44 , Processed in 0.077395 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表