Read text data containing variables in rows and columns and to split them out paragraph wise in different variables.
1 次查看(过去 30 天)
显示 更早的评论
I would like to read the text data below and seperate it in different parts such that (__PARAMETER__) variable will contain all the data below it, (__RESULTS__) variable would contain data below it and so on. Then would like to transpose the (__PARAMETER__) and the (__RESULTS__)column. Search the variables in and take the mean (average) values of only certain parameters (like box temperature, pressure and input temperature) and display them in a different variable.
__MEASUREMENT_INFO__
Date / Time: 07.01.2010, 17:14
Sample ID: Sample A / 100 %
Comment: 225 °c / 20 bar
__PARAMETER__
Box Temperature [°C]: 224 224.55 224.55 224.55 224.55 224.55 224.70 224.60 224.55 224.60 224.55 224.70
Box Pressure [bar]: 20.12 20.11 20.11 20.10 20.10 20.13 20.10 20.12 20.12 20.13 20.11 20.10
Input Pressure [bar]: 987.00 987.00 988.00 988.00 987.00 987.00 986.00 987.00 988.00 987.00 987.00 988.00
Input Duration [µsec]: 1200 0 0 0 0 0 0 0
Input Temperature [°C]: 107.20 107.30 107.20 107.10 107.10 107.10 107.10 107.10 107.10 107.10 107.00 107.10
Pressure Transmitter Temperature [°C]: 87.60 87.70 87.60 87.60 87.60 87.30 87.80 87.50 87.50 87.60 87.50 87.40
Samples Pressure 500 ms after Inj. [bar]: 372.00 345.00 344.00 345.00 350.00 340.00 351.00 331.00 347.00 344.00 349.00 350.00
Gas A, compressed air [%]: 100.0
Gas B, [%]: 0.0
__RESULTS__
Time Delay [msec]: 6.1943 6.2343 6.2264 6.3532 6.1839 6.3281 6.2283 6.3972 6.3166 6.2314 6.1887 6.3808
Mean [msec]: 6.2719
Standard Deviation [msec]: 0.0781
CN calc [-]: 0.00
CN Path: C:\ProgramData\
__DATA__
1 2 3 4 5 6 7 8 9 10 11 12 Resolution[µs]
-14.560 -14.272 -15.012 -14.904 -14.468 -14.953 -14.256 -15.350 -14.039 -14.360 -14.153 -14.670 4
-14.560 -14.272 -15.012 -14.904 -14.470 -14.953 -14.256 -15.350 -14.038 -14.360 -14.154 -14.669 4
-14.560 -14.270 -15.012 -14.904 -14.469 -14.954 -14.256 -15.350 -14.038 -14.360 -14.153 -14.668 4
-14.561 -14.270 -15.011 -14.905 -14.469 -14.954 -14.256 -15.352 -14.037 -14.360 -14.152 -14.670 4
-14.560 -14.270 -15.011 -14.904 -14.468 -14.953 -14.256 -15.352 -14.040 -14.360 -14.152 -14.670 4
-14.560 -14.271 -15.011 -14.905 -14.469 -14.954 -14.256 -15.352 -14.038 -14.361 -14.152 -14.670 4
-14.561 -14.271 -15.013 -14.905 -14.469 -14.955 -14.255 -15.352 -14.038 -14.360 -14.151 -14.669 4
-10.038 -9.831 -10.711 -10.848 -10.063 -10.873 -9.914 -10.708 -9.880 -10.118 -9.769 -10.536 40
-10.042 -9.835 -10.717 -10.853 -10.063 -10.879 -9.922 -10.712 -9.881 -10.120 -9.775 -10.540 40
__MSS__
MSS [mg/m3] Time[ms] Chamber Pressure[bar]
__CLD__
CLD [ppm] Time[ms] Chamber Pressure[bar]
0 个评论
采纳的回答
Mathieu NOE
2020-11-9
hello
this is not a 100% finished solution, but you can get a pretty good idea how to finalize it
you get the DATA, PARAMETERS and RESULTS (not everything , I left you some work :))
main code :
%%% main code %%%
file_list = dir ('*txt');
M= length (file_list);
[DATA,PARAMETER,RESULTS] = retrieve_data(file_list(1).name);
function [DATA,PARAMETER,RESULTS] = retrieve_data(Filename)
fid = fopen(Filename);
tline = fgetl(fid);
% initialization
k = 0;
p = 0;
q = 0;
r = 0;
s = 0;
t = 0;
%%%%%%%% first loop : scan entire file to find pages (sections ) that must be evaluated %%%%%%%%%%%
while ischar(tline)
k = k+1; % loop over line index
% retrieve line number of __PARAMETER__
if contains(tline,'__PARAMETER__')
k_parameter = k;
p = p+1;
Parameters_line_index(p,1) = k; %
end
% retrieve line number of __RESULTS__
if contains(tline,'__RESULTS__')
k_results= k;
q = q+1;
Results_line_index(q,1) = k; %
end
% retrieve line number of __DATA__
if contains(tline,'__DATA__')
k_data = k;
r = r+1;
Data_line_index(r,1) = k; %
end
% retrieve line number of __MSS__
if contains(tline,'__MSS__')
k_mss = k;
s = s+1;
MSS_line_index(r,1) = k; %
end
% retrieve line number of ___CLD__
if contains(tline,'__CLD__')
k_cld = k;
t = t+1;
CLD_line_index(r,1) = k; %
end
tline = fgetl(fid);
end
fclose(fid);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% second loop : data extraction all sections %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k = 0;
fid = fopen(Filename);
tline = fgetl(fid);
while ischar(tline)
k = k+1;
% job for __PARAMETER__ data retrieval
% __PARAMETER__
% Box Temperature [°C]: 224 224.55
% Box Pressure [bar]: 20.12 20.11
% Input Pressure [bar]: 987.00 987.00
% Input Duration [µsec]: 1200 0
% Input Temperature [°C]: 107.20 107.30
% Pressure Transmitter Temperature [°C]: 87.60
% Samples Pressure 500 ms after Inj. [bar]:
% Gas A, compressed air [%]:
% Gas B, [%]: 0.0
if (k == k_parameter+1) % Box Temperature [°C]:
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Box_Temperature = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+2) % Box Pressure [bar]:
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Box_Pressure = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+3) % Input Pressure [bar]:
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Input_Pressure = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+4) % Input Duration [µsec]:
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Input_Duration = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+5) % Input Temperature [°C]
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Input_Temperature = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+6) % Pressure Transmitter Temperature [°C]
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Pressure_Transmitter_Temperature = regexp(string(ind_separator+3:n), '\t', 'split');
elseif (k == k_parameter+7) % Samples Pressure 500 ms after Inj. [bar]
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
PARAMETER.Samples_Pressure = regexp(string(ind_separator+3:n), '\t', 'split');
end
% % __RESULTS__
% % Time Delay [msec]:
% % Mean [msec]:
% % Standard Deviation [msec]:
% % CN calc [-]:
% % CN Path:
if (k == k_results+1) % Time Delay [msec]:
[m,n] = size(tline); string = tline(1:n);
% find index of ":" mark
ind_separator = findstr(string,':');
% Name = string(1:ind_separator-1); data_string = string(ind_separator+3:n);
RESULTS.Box_Temperature = regexp(string(ind_separator+3:n), '\t', 'split');
end
tline = fgetl(fid);
end
fclose(fid);
% %%% DATA %%%%% can be read in one shot
DATA = dlmread(Filename,'\t',[k_data+1 0 k_mss-4 12]); % reads only data vector
end
%
3 个评论
Mathieu NOE
2020-11-12
hello
so how are you doing ? need further assistance ? (got your PM in my mail box)
更多回答(1 个)
Mathieu NOE
2020-11-12
hello
so finally upgraded the code for multiple files processing and doing the min/mean/max computation on several variables
hope this helps you
8 个评论
Mathieu NOE
2020-11-30
hello Aman
I wished I could help you , but I don't have the Curve Fitting Toolbox.
I cannot run your code
'prepareSurfaceData' requires Curve Fitting Toolbox.
Error in Plot_from_Tables (line 11)
[xData, yData, zData] = prepareSurfaceData(Pressure,Temperature,IDT);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Import and Analysis 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!