声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2478|回复: 5

如何从庞大的数据文件中提取部分数据呢?

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

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

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

x
比如我的每个数据项的类型如下<BR>2006 3 13 at 12:23:12 , 6.3,46565,(12 13 12),(12 12 13) /n<BR>每项数据之间以回车分开,现在我需要提取每项数据中的第三个元素(例子中的46565)进行画图,<BR>该怎么编程实现呢<BR>数据文件是相当庞大的,不可能人工输入了<BR>数据文件都以例子的格式存储在txt文件中<BR>我是刚学matlab的,急需您的帮助<BR>多谢了<IMG src="http://www.programfan.com/club/image/emotions/17.gif" border=0>
回复
分享到:

使用道具 举报

发表于 2006-3-21 18:10 | 显示全部楼层

如何从庞大的数据文件中提取部分数据呢?

<P>以前看过的,希望对你有帮助<BR><BR></P>
<P inter-ideograph; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">文件内容形式一(假定文件名为test1.txt):<BR>你好<BR>欢迎来到<BR>动力学与控制技术论坛<BR><a href="http://www.dytrol.com/" target="_blank" >www.dytrol.com</A><BR>1 11 111 1111<BR>2 22 222 2222<BR>3 33 333 3333<BR>4 44 444 4444<BR>5 55 555 5555<BR>这样的文件怎么读入数据呢?<BR>方法有多种,现举两个比较简单实用的。<BR>方法一:<BR>file/import data....../next/finish<BR>&gt;&gt; whos<BR>  Name           Size                   Bytes  Class<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">  data           5x4                      160  double array<BR>  textdata       4x1                      300  cell array<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">Grand total is 54 elements using 460 bytes<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">&gt;&gt; data<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">data =<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">           1          11         111        1111<BR>           2          22         222        2222<BR>           3          33         333        3333<BR>           4          44         444        4444<BR>           5          55         555        5555<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">&gt;&gt; textdata<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">textdata = <p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">    '你好'<BR>    '欢迎来到'<BR>    '动力学与控制技术论坛'<BR>    'www.dytrol.com'<BR>方法二:<BR>[a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)<BR>说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。<BR>这里%s的个数和[a1,a2,a3,a4]对应。<BR>&gt;&gt; [a1,a2,a3,a4]=textread('test1.txt','%s%s%s%s','headerlines',4)<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">a1 = <p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">    '1'<BR>    '2'<BR>    '3'<BR>    '4'<BR>    '5'<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify"><BR>a2 = <p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">    '11'<BR>    '22'<BR>    '33'<BR>    '44'<BR>    '55'<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify"><BR>a3 = <p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">    '111'<BR>    '222'<BR>    '333'<BR>    '444'<BR>    '555'<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify"><BR>a4 = <p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">    '1111'<BR>    '2222'<BR>    '3333'<BR>    '4444'<BR>    '5555'<BR>因以字符串的形式读入,所以有''。<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">文件内容形式二(假定文件名为test2.txt):<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">你好<BR>1 11 111 1111<BR>欢迎来到<BR>2 22 222 2222<BR>动力学与仿真控制论坛<BR>3 33 333 3333<BR><a href="http://www.dytrol.com/" target="_blank" >www.dytrol.com</A><BR>4 44 444 4444<BR>5 55 555 5555<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">说明:这种内容格式的文件用上面的方法是不行的。<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">以下是由chinamaker编写的一种方法:<BR>fidin=fopen('test2.txt');                               % 打开test2.txt文件             <BR>fidout=fopen('mkmatlab.txt','w');                       % 创建MKMATLAB.txt文件<BR>while ~feof(fidin)                                      % 判断是否为文件末尾               <BR>    tline=fgetl(fidin);                                 % 从文件读行   <BR>    if double(tline(1))&gt;=48&amp;&amp;double(tline(1))&lt;=57       % 判断首字符是否是数值<BR>       fprintf(fidout,'%s\n\n',tline);                  % 如果是数字行,把此行数据写入文件MKMATLAB.txt<BR>       continue                                         % 如果是非数字继续下一次循环<BR>    end<BR>end<BR>fclose(fidout);<BR>MK=importdata('MKMATLAB.txt');      % 将生成的MKMATLAB.txt文件导入工作空间,变量名为MK,实际上它不显示出来 <BR>&gt;&gt; MK<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">MK =<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; TEXT-INDENT: 18pt; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">           1          11         111        1111<BR>           2          22         222        2222<BR>           3          33         333        3333<BR>           4          44         444        4444<BR>           5          55         555        5555<p></p></P>
<P inter-ideograph; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: justify; mso-char-indent-count: 0">俺一般将数据存成文本,用load导入,再操作。<BR>如:<BR>load qq.dat;<BR>plot(qq(:,1),qq(:,2))<BR>等等,</P>
发表于 2006-3-21 19:10 | 显示全部楼层
呵呵,我的笨方法是打开txt文件,用替换操作将非数字项用空格全部替换。然后load file.txt;file(:,8)
发表于 2006-3-21 19:12 | 显示全部楼层

回复:(shirleyice)如何从庞大的数据文件中提取部分...

用fopen有选择的读取比较好,节省资源,效率高
发表于 2006-3-22 14:50 | 显示全部楼层
<P>察看textread的帮助文档,跳过1 2和3以后数据<BR>[data]=textread(file,'%*s%*s%f%*[^\n]',delimiter,',')<BR>大致是这样的</P>
 楼主| 发表于 2006-3-22 17:44 | 显示全部楼层

太感谢各位的热情帮助了,我快感动死了。。。

大家说的都挺好的,我尝试一下。。。[em07]
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-10-5 01:24 , Processed in 0.063396 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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