声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 matlab 查看内容

matlab中常见txt文件读入的实用方法

2015-10-31 07:07| 发布者: aspen| 查看: 1282| 评论: 27|原作者: frogfish|来自: 声振论坛

摘要: 文件内容形式一(假定文件名为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 这样的文件怎么读入数据呢? 方法有多种, ...
文件内容形式一(假定文件名为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 编辑 ]

文件内容形式二(假定文件名为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
发表评论

最新评论

引用 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))
等等,
比较崩的,:)
楼主的好[em01]
引用 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: [5x4 double]
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');
引用 happy 2006-3-8 15:18
你的test2.txt文件是否和chinamaker给出的一致?
引用 happy 2006-3-8 15:22
MK.data
引用 mechart 2006-3-30 10:41
经过我的实验,主要是因为文件中包含空行,改进的方法参考贴子:
http://forum.vibunion.com/thread-8937-1-1.html
引用 soluble 2006-5-6 05:00
谢谢了,刚好编个东西在找这方法。
引用 wangyongq246 2006-9-7 22:14
如果文件是这样的:
GRCOF2    0    0 -.193957052819E-10 0.000000000000E+00 0.0000E+00 0.0000E+00 030201.000000 030301.000000 nnnn                       
GRCOF2    1    0 -.113915075871E-09 0.000000000000E+00 0.0000E+00 0.0000E+00 030201.000000 030301.000000 nnnn                       
GRCOF2    1    1 -.522107693958E-10 0.145115258043E-09 0.0000E+00 0.0000E+00 030201.000000 030301.000000 nnnn                       
GRCOF2    2    0 0.116073276851E-09 0.000000000000E+00 0.0000E+00 0.0000E+00 030201.000000 030301.000000 nnnn

我要把其中的数据读出来,应该怎么写呢?

查看全部评论(27)

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

GMT+8, 2024-5-10 06:30 , Processed in 0.101751 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部