如何从庞大的数据文件中提取部分数据呢?
比如我的每个数据项的类型如下<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>如何从庞大的数据文件中提取部分数据呢?
<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>>> whos<BR>Name Size BytesClass<p></p></P>
<P inter-ideograph; WORD-BREAK: break-all; LINE-HEIGHT: 12pt; TEXT-ALIGN: justify">data 5x4 160double array<BR>textdata 4x1 300cell 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">>> 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">>> 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>=textread('test1.txt','%s%s%s%s','headerlines',4)<BR>说明:%s可以是其他形式,跟读入的数据类型有关,比如这里也可以用%n,%f等。<BR>这里%s的个数和对应。<BR>>> =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))>=48&&double(tline(1))<=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>>> 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>
呵呵,我的笨方法是打开txt文件,用替换操作将非数字项用空格全部替换。然后load file.txt;file(:,8)
回复:(shirleyice)如何从庞大的数据文件中提取部分...
用fopen有选择的读取比较好,节省资源,效率高 <P>察看textread的帮助文档,跳过1 2和3以后数据<BR>=textread(file,'%*s%*s%f%*[^\n]',delimiter,',')<BR>大致是这样的</P>太感谢各位的热情帮助了,我快感动死了。。。
大家说的都挺好的,我尝试一下。。。
页:
[1]