bainhome 发表于 2005-8-31 20:19:44

[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

taohe 发表于 2005-9-1 00:42:09

Re:[zt from dytrol]matlab中常见txt文件读入的实用方法

说起数据文件的导入导出,最好能看看下面这篇技术文章,它同时介绍了文本以及二进制文件的常用函数。

http://www.mathworks.com/support/tech-notes/1600/1602.html

不过这篇文章并没有包括最新的命令textscan以及内存映射方式的数据文件读写。

bainhome 发表于 2005-9-1 02:35:02

Re:[zt from dytrol]matlab中常见txt文件读入的实用方法

受教,多谢...找了很多资料却忽略了MATLAB官方主页的介绍,谢谢您的提醒.
顺便再问一个问题,能简单介绍一下"内存映射方式的数据问题读写"吗?

taohe 发表于 2005-9-1 10:59:32

Re:[zt from dytrol]matlab中常见txt文件读入的实用方法

内存映射方式的数据读写一般用来读写二进制文件。是matlab 7.0.4才开始有的新功能。简单地说,它可以让你像操作矩阵那样读写文件中的数据。我的书稿中有关于这个的介绍和例子。或者等过些天我不太忙的时候,在这里发贴介绍。

风天小畜 发表于 2009-4-29 11:56:45

内存映射方式的数据读写,
win 32 API 就有的。
主要用于,需要反复读写的文件,或者超大文件。
-----------------
在matlab help 文档里面就是 memmapfile
它类似win32的内存映射

它就是个高级的class。主要是 fseek ,结合 fopen,fread,fwrite...
如果是纯粹的读文件,不需要反复读写,就不用内存映射方式了

事实上,如果擅长fopen,fseek,fread,对于某个具体问题,如果不考虑代码重用,就可以不用内存映射方式。fseek 是非常强大的
善用 fseek ,可以让文件 读和回写 显得非常高效
页: [1]
查看完整版本: [zt from dytrol]matlab中常见txt文件读入的实用方法