2

私のデータは次の形式です:

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つのファイルに生成しています。たとえば、名前_3、名前_6、_9のそれぞれについて、ベクトルTIME1、TIME2、TIME3、TIME4、TIME5で、他のベクトルについても同様に、TIMEデータを読み取って保存したいとします。

4

1 に答える 1

5

まず、TIME1、TIME2などの変数名はすぐに乱雑になるため、使用しないことをお勧めします。代わりに、たとえば、5行(各ウェルに1つ)と1列または2列のセル配列を使用できます。以下のサンプルコードでwellData{2,1}は、は2番目の井戸の時間でwellData{2,2}あり、対応する石油レートSC-年間です。

読書をするためのよりエレガントな方法があるかもしれません。ここに簡単なものがあります:

%# 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
于 2010-08-25T01:01:26.133 に答える