[转帖]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 编辑 ] 文件内容形式二(假定文件名为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 形式二文件的读取,挺不错,赞其构思~~~~ 俺一般将数据存成文本,用load导入,再操作。
如:
load qq.dat;
plot(qq(:,1),qq(:,2))
等等,
比较崩的,:)
楼主的好 自己写的程序我也一边用load
不过很多软件算出来的就load不进来了 呵呵!谢过了!刚刚开始学习matlab,正好用得上! 刚刚学,运行由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 编辑 ] test2.txt文件你放在哪里?
[ 本帖最后由 ChaChing 于 2010-4-18 00:00 编辑 ] 和由chinamaker编写的程序放在一个文件夹。这个文件夹设为current directory fopen的时候给出test2.txt的路径 我是新手,不是很明白你的意思,能具体点吗?happy 你的qq.dat是怎么制作的,能举一个例子吗? >> MK=importdata('test1.txt')
MK=importdata('test1.txt')
MK =
data:
textdata: {4x1 cell}
>> data
??? Undefined function or variable 'data'.
为什么会出现错误而不能正确显示呢? 我也试着运行了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
请高手帮忙解答。非常感谢 比如说你的test2.txt放在d:\data目录下,那么第一句改为fidin=fopen('d:\data\test2.txt');
页:
[1]
2