开发者

How to read data in chunks from notepad file in Matlab?

开发者 https://www.devze.com 2023-01-12 19:04 出处:网络
My data is in following format: TABLE NUMBER 1 FILE: name_1 name_2 TIMEname_3 day name_4 -0.010 364.9935368.4

My data is in following format:

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
    开发者_StackOverflow                                            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

Till now I was splitting this data and reading the variables (time and name_i) from each file in following way:

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

But now I am producing the data of those files into 1 file as shown in beginning. For example I want to read and store TIME data in vectors TIME1, TIME2, TIME3, TIME4, TIME5 for name_3, name_6, _9 respectively, and similarly for others.


First of all, I suggest you don't use variable names such as TIME1,TIME2 etc, since that gets messy quickly. Instead, you can e.g. use a cell array with five rows (one for each well), and one or two columns. In the sample code below, wellData{2,1} is the time for the second well, wellData{2,2} is the corresponding Oil Rate SC - Yearly.

There might be more elegant ways to do the reading; here's something quick:

%# 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
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号