作者greg2977 (澔呆)
看板MATLAB
标题[运算] 读取档案最佳化
时间Sun Dec 23 23:24:26 2012
我的档案大概有30万行,贴前面几行
"TOA5","CR800Series","CR800","3780","CR800.Std.05","CPU:1011109.CR8","59367","Table1"
"TIMESTAMP","RECORD","WS_ms_S_WVT","WindDir_D1_WVT","WS_ms_new_S_WVT","WindDir_new_D1_WVT"
"TS","RN","","Deg","","Deg"
"","","WVc","WVc","WVc","WVc"
"2012-11-09 11:52:30",0,5.28,342,4.541,12.87
"2012-11-09 11:52:36",1,4.475,343.4,4.394,17.41
"2012-11-09 11:52:42",2,3.482,345.5,3.283,20.87
"2012-11-09 11:52:48",3,3.016,355.2,3.43,4.637
"2012-11-09 11:52:54",4,3.746,347.9,3.348,43.72
"2012-11-09 11:53:00",5,5.461,347.2,5.668,14.22
...
我想要写个程式将去四行档头後~把资料读入并分门别类
我目前的写法是:
==============================================================================
filename = '1011203.dat'; %%档名
fid=fopen(filename);
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid); %跳过四行档头
i=0;
tline = fgetl(fid);
while ischar(tline)
i=i+1; %%%计数器
tline = fgetl(fid);
end
data=zeros(i,12); %设定档案大小
fid=fopen(filename);
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid); %跳过四行档头
i=0;
tline = fgetl(fid);
while ischar(tline)
tlength=length(tline);
whereComma=strfind(tline,','); %找逗号
data(i,1)=str2double(tline(2:5));
data(i,2)=str2double(tline(7:8));
data(i,3)=str2double(tline(10:11));
data(i,4)=str2double(tline(13:14));
data(i,5)=str2double(tline(16:17));
data(i,6)=str2double(tline(19:20));
data(i,7)=str2double(tline(whereComma(1)+1:whereComma(2)-1));
data(i,8)=str2double(tline(whereComma(2)+1:whereComma(3)-1));
data(i,9)=str2double(tline(whereComma(3)+1:whereComma(4)-1));
data(i,10)=str2double(tline(whereComma(4)+1:whereComma(5)-1));
data(i,11)=str2double(tline(whereComma(5)+1:tlength));
data(i,11)=str2double(tline(whereComma(5)+1:whereComma(6)-1));
data(i,12)=str2double(tline(whereComma(6)+1:tlength));
tline = fgetl(fid);
end
==============================================================================
可是读档速度有点慢,问题可能在於读法太蠢...
不知道版上的高手们能不能点拨一下
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.177.112.62
1F:→ mp19990920:若您只是要删除前4行後的档案,可用任何的编辑软体完成 12/23 23:38
2F:→ mp19990920:若您要把删除前4行的资料弄进matlab的话,可以用 12/23 23:39
3F:→ mp19990920:File->"Import Data..."->选择你的档案, 之後用matlab 12/23 23:41
4F:→ mp19990920:的指令把前4行删掉 12/23 23:41
5F:→ greg2977:问题是我会需要一次读入好多笔来做比对与运算 12/23 23:53
6F:→ greg2977:况且这个动作一段时间就要执行一次 12/23 23:54
7F:→ greg2977:感谢一楼的推文~让我知道有如此神速的方法 12/23 23:56
8F:→ greg2977:程式的美妙之处就在於多久可以找出答案 12/24 01:35
9F:→ greg2977:我觉得我找出来了= =+ 12/24 01:35
10F:→ mp19990920:不客气....我看成你出来了 = =||| 12/24 02:35
11F:→ greg2977:textread(filename,'%s %*d %f %f %f %f %f %f', 12/24 15:19
12F:→ greg2977:'headerlines',4,'delimiter',','); 12/24 15:20