2010-08-24 28 views
2

我的數據是在以下格式:如何在Matlab中從記事本文件中讀取數據塊?

TABLE NUMBER 1 
               FILE: name_1 
                  name_2 
TIME name_3 
day name_4 
-0.01 0 
364.99 35368.4 
729.99 29307 
1094.99 27309.5 
1460.99 26058.8 
1825.99 25100.4 
2190.99 24364 
2555.99 23757.1 
2921.99 23240.8 
3286.99 22785 
3651.99 22376.8 
4016.99 22006.1 
4382.99 21664.7 
4747.99 21348.3 
5112.99 21052.5 
5477.99 20774.1 
5843.99 20509.9 
6208.99 20259.7 
6573.99 20021.3 
6938.99 19793.5 
7304.99 19576.6 
TABLE NUMBER 2 
               FILE: name_1 
                  name_5 
TIME name_6 
day name_7 
-0.01 0 
364.99 43110.4 
729.99 37974.1 
1094.99 36175.9 
1460.99 34957.9 
1825.99 34036.3 
2190.99 33293.3 
2555.99 32665.8 
2921.99 32118.7 
3286.99 31626.4 
3651.99 31175.1 
4016.99 30758 
4382.99 30368.5 
4747.99 30005.1 
5112.99 29663 
5477.99 29340 
5843.99 29035.2 
6208.99 28752.4 
6573.99 28489.7 
6938.99 28244.2 
7304.99 28012.9 
TABLE NUMBER 3 

直到現在我劈開這個數據和讀取每個文件中的變量(time and name_i)以下列方式:

[TIME(:,j), name_i(:,j)]=textread('filename','%f\t%f','headerlines',5); 

但現在我生產的數據如開頭所示將這些文件分成1個文件。例如,我想分別讀取TIME1,TIME2,TIME3,TIME4,TIME5中的TIME數據,並分別存儲name_3,name_6,_9和其他數據。

回答

5

首先,我建議你不要使用變量名稱,如TIME1,TIME2等,因爲它會很快變得凌亂。相反,您可以使用具有五行(每個孔一個)的單元格陣列和一個或兩個列。在下面的示例代碼中,wellData{2,1}是第二個井的時間,wellData{2,2}是相應的Oil Rate SC - Yearly。

可能有更優雅的方式來做閱讀;這裏是快速的:

%# open the file 
fid = fopen('Reportq.rwo'); 

%# read it into one big array, row by row 
fileContents = textscan(fid,'%s','Delimiter','\n'); 
fileContents = fileContents{1}; 
fclose(fid); %# don't forget to close the file again 

%# find rows containing TABLE NUMBER 
wellStarts = strmatch('TABLE NUMBER',fileContents); 
nWells = length(wellStarts); 

%# loop through the wells and read the numeric data 
wellData = cell(nWells,2); 
wellStarts = [wellStarts;length(fileContents)]; 

for w = 1:nWells 
    %# read lines containing numbers 
    tmp = fileContents(wellStarts(w)+5:wellStarts(w+1)-1); 
    %# convert strings to numbers 
    tmp = cellfun(@str2num,tmp,'uniformOutput',false); 
    %# catenate array 
    tmp = cat(1,tmp{:}); 
    %# assign output 
    wellData(w,:) = mat2cell(tmp,size(tmp,1),[1,1]); 
end 
相關問題