如何在Matlab中从记事本文件中读取数据块?
我的数据格式如下:如何在Matlab中从记事本文件中读取数据块?,matlab,file-io,text-files,chunks,Matlab,File Io,Text Files,Chunks,我的数据格式如下: 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 146
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(:,j), name_i(:,j)]=textread('filename','%f\t%f','headerlines',5);
但现在我将这些文件的数据生成为一个文件,如开始部分所示。例如,我想分别为name_3、name_6、name_9读取和存储向量TIME1、TIME2、TIME3、TIME4、TIME5中的时间数据,对其他变量也是如此。首先,我建议不要使用变量名,如TIME1、TIME2等,因为这样很快就会变得混乱。相反,您可以使用一个具有五行(每个井一行)和一列或两列的单元阵列。在下面的示例代码中,
wellData{2,1}
是第二口井的时间,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