Как читать данные кусками из файла блокнота в 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 файл, как показано в начале. Например, я хочу прочитать и сохранить данные TIME в векторах TIME1, TIME2, TIME3, TIME4, TIME5 для name_3, name_6, _9 соответственно и аналогично для других.


person Community    schedule 24.08.2010    source источник


Ответы (1)


Прежде всего, я предлагаю вам не использовать имена переменных, такие как TIME1, TIME2 и т. д., так как это быстро приводит к путанице. Вместо этого вы можете, например. используйте массив ячеек с пятью строками (по одной для каждой лунки) и одним или двумя столбцами. В приведенном ниже примере кода wellData{2,1} — время для второй скважины, wellData{2,2} — соответствующий дебит нефти 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
person Jonas    schedule 25.08.2010