声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1312|回复: 11

[编程技巧] 带头文件的含有上百列数据的文本读入问题

[复制链接]
发表于 2010-3-6 17:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位高手,我现在有大量实验数据要处理,每个数据文本都有15000*200并带有采集程序设定的头文件,有没较快的办法把它读入?用textread好像可以去掉文件头,但是列数太多,不可能每列给出一个格式符 [c1 c2 c3 c4 ......]=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) 各位 高手有没好办法
回复
分享到:

使用道具 举报

发表于 2010-3-7 00:51 | 显示全部楼层
个人读外部文件较习惯使用fgetl/fscanf/...
刚再看下textread帮助文件, 应不需每列给出一个格式符!
先看看
[原创]使用文本文件(.txt)进行数据存取的技巧总结
http://forum.vibunion.com/forum/ ... 5622&highlight=
或上传一小部分资料方便别人试
 楼主| 发表于 2010-3-7 09:48 | 显示全部楼层

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

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

1.5-14.txt

151.68 KB, 下载次数: 15

带表头的数据文件

发表于 2010-3-7 12:11 | 显示全部楼层
clc; clear
filename='1.5-14.txt';
aa=textread(filename,'%f','headerlines',7);
aa=reshape(aa,385,[])';

评分

1

查看全部评分

 楼主| 发表于 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));
但是我试了下,行不通,不知为什么??
发表于 2010-3-7 23:37 | 显示全部楼层
个人水平有限, 有无更快的方式, 实在没研究过!
一般个人读外部文件较习惯使用fgetl/fscanf/...的方式, 但没像LZ般比较过其速度快慢! 今天也是第一次试textread:@L
可能个人懒, 反正仅读一次, 若不是真的很久, 整体应差异不大吧!:loveliness:
当然也期待LZ研究后, 告知好结果! 或同待高人路过
至于使用%s读入cell再转换str再转换double, 个人以为好像没那必要!
发表于 2010-3-8 09:26 | 显示全部楼层
用textscan函数读取数据会比较快。我做了一项测试,用textreadtextscan函数读取同一个TXT数据文件,文件中数据量为1000000×8,文件大小为69.6 MBtextread函数用时30.7771秒,textscan函数用时3.3632秒,可以看出textscan函数比textread函数效率高了很多

  1. fid = fopen('1.5-14.txt','r');    % 以只读方式打开文件1.5-14.txt
  2. A = textscan(fid, repmat('%6.2f',[1,200]), 'CollectOutput', 1,'HeaderLines',7);
  3. A = A{:};
  4. fclose(fid);
复制代码

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

评分

1

查看全部评分

发表于 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.
 楼主| 发表于 2010-3-8 12:47 | 显示全部楼层

matlab 版本?

奇怪了,我用的6.5版本,里面没有textscan 命令
发表于 2010-3-9 00:02 | 显示全部楼层
旧版的matlab好像无此textscan 函数!
发表于 2010-3-10 10:45 | 显示全部楼层
学习,谢谢:handshake :handshake
发表于 2010-3-10 23:15 | 显示全部楼层
我以前是在ultraedit中,用批量查找+正则表达式整理完txt后再用matlab处理的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 01:31 , Processed in 0.067171 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表