lcg2551 发表于 2010-3-6 17:39

带头文件的含有上百列数据的文本读入问题

各位高手,我现在有大量实验数据要处理,每个数据文本都有15000*200并带有采集程序设定的头文件,有没较快的办法把它读入?用textread好像可以去掉文件头,但是列数太多,不可能每列给出一个格式符 =textread('filename',''%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f'%6.2f .............', 'headerlines',7) 各位 高手有没好办法

ChaChing 发表于 2010-3-7 00:51

个人读外部文件较习惯使用fgetl/fscanf/...
刚再看下textread帮助文件, 应不需每列给出一个格式符!
先看看
[原创]使用文本文件(.txt)进行数据存取的技巧总结
http://forum.vibunion.com/forum/viewthread.php?tid=45622&highlight=
或上传一小部分资料方便别人试

lcg2551 发表于 2010-3-7 09:48

上传附件数据样本,求助了!!

ChaChing : 谢谢关注, 你给的链接文章我看了,不过还是没能解决问题。由于上传文件大小限制,我截取了小部分数据文件,上传于附件,请各位帮忙试试如何把数据读出来,读成一个整体矩阵,或者能够 单独按列读取任意需要的列。

ChaChing 发表于 2010-3-7 12:11

clc; clear
filename='1.5-14.txt';
aa=textread(filename,'%f','headerlines',7);
aa=reshape(aa,385,[])';

lcg2551 发表于 2010-3-7 16:00

谢谢, 还有其他办法没??

ChaChing :非常感谢你的帮助,我试了你的办法,可以读入。不过我比较了下,手动删除表头,然后用load读入一个完整的文本,用18秒,用你的办法用49秒, 速度上会慢些,不知你还有没别的办法能读入快一点的? 我见别人用 下面语句读入
aa=textread('1.5-14.txt','%s','delimiter','\n','whitespace','','headerlines',7);% 过渡数据
a=str2num(cell2mat(gross_dat));
但是我试了下,行不通,不知为什么??

ChaChing 发表于 2010-3-7 23:37

个人水平有限, 有无更快的方式, 实在没研究过!
一般个人读外部文件较习惯使用fgetl/fscanf/...的方式, 但没像LZ般比较过其速度快慢! 今天也是第一次试textread:@L
可能个人懒, 反正仅读一次, 若不是真的很久, 整体应差异不大吧!:loveliness:
当然也期待LZ研究后, 告知好结果! 或同待高人路过
至于使用%s读入cell再转换str再转换double, 个人以为好像没那必要!

xiezhh 发表于 2010-3-8 09:26

用textscan函数读取数据会比较快。我做了一项测试,用textread和textscan函数读取同一个TXT数据文件,文件中数据量为1000000×8,文件大小为69.6 MB。textread函数用时30.7771秒,textscan函数用时3.3632秒,可以看出textscan函数比textread函数效率高了很多
fid = fopen('1.5-14.txt','r');    % 以只读方式打开文件1.5-14.txt
A = textscan(fid, repmat('%6.2f',), 'CollectOutput', 1,'HeaderLines',7);
A = A{:};
fclose(fid);


[ 本帖最后由 xiezhh 于 2010-3-8 09:32 编辑 ]

ChaChing 发表于 2010-3-8 11:15

其实在textread帮助文献中, 即有如下说明!
Note    When reading large text files, reading from a specific point in a file, or reading file data into a cell array rather than multiple outputs, you might prefer to use the textscan function.

lcg2551 发表于 2010-3-8 12:47

matlab 版本?

奇怪了,我用的6.5版本,里面没有textscan 命令

ChaChing 发表于 2010-3-9 00:02

旧版的matlab好像无此textscan 函数!

shearwave 发表于 2010-3-10 10:45

学习,谢谢:handshake :handshake

ziyao 发表于 2010-3-10 23:15

我以前是在ultraedit中,用批量查找+正则表达式整理完txt后再用matlab处理的
页: [1]
查看完整版本: 带头文件的含有上百列数据的文本读入问题