[zt from dytrol]matlab中常见txt文件读入的实用方法
[推荐]matlab中常见txt文件读入的实用方法感谢动力学与控制技术论坛的那些无私的奉献者!!
本帖特别感谢chinamaker,wolfer555,午夜流星,小人物小小等。
%小人物小小整理
% www.dytrol.com
% 2004.7.9
文件内容形式一(假定文件名为test1.txt):
你好
欢迎来到
动力学与控制技术论坛
www.dytrol.com
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 BytesClass
data 5x4 160double array
textdata 4x1 300cell 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 =
'你好'
'欢迎来到'
'动力学与控制技术论坛'
'www.dytrol.com'
方法二:
=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'
因以字符串的形式读入,所以有''。
文件内容形式二(假定文件名为test2.txt):
你好
1 11 111 1111
欢迎来到
2 22 222 2222
动力学与仿真控制论坛
3 33 333 3333
www.dytrol.com
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
Re:[zt from dytrol]matlab中常见txt文件读入的实用方法
说起数据文件的导入导出,最好能看看下面这篇技术文章,它同时介绍了文本以及二进制文件的常用函数。http://www.mathworks.com/support/tech-notes/1600/1602.html
不过这篇文章并没有包括最新的命令textscan以及内存映射方式的数据文件读写。
Re:[zt from dytrol]matlab中常见txt文件读入的实用方法
受教,多谢...找了很多资料却忽略了MATLAB官方主页的介绍,谢谢您的提醒.顺便再问一个问题,能简单介绍一下"内存映射方式的数据问题读写"吗?
Re:[zt from dytrol]matlab中常见txt文件读入的实用方法
内存映射方式的数据读写一般用来读写二进制文件。是matlab 7.0.4才开始有的新功能。简单地说,它可以让你像操作矩阵那样读写文件中的数据。我的书稿中有关于这个的介绍和例子。或者等过些天我不太忙的时候,在这里发贴介绍。 内存映射方式的数据读写,win 32 API 就有的。
主要用于,需要反复读写的文件,或者超大文件。
-----------------
在matlab help 文档里面就是 memmapfile
它类似win32的内存映射
它就是个高级的class。主要是 fseek ,结合 fopen,fread,fwrite...
如果是纯粹的读文件,不需要反复读写,就不用内存映射方式了
事实上,如果擅长fopen,fseek,fread,对于某个具体问题,如果不考虑代码重用,就可以不用内存映射方式。fseek 是非常强大的
善用 fseek ,可以让文件 读和回写 显得非常高效
页:
[1]