Clear Filters
Clear Filters

Extract row data from a complex data file

1 view (last 30 days)
Hello Support,
I've a data file with multiple rows and columns, and I want to extract column values from a defined row. It has headers in first column. See attached the file. I want to extract row number = 24 data of columns from 2 to 60. This row has total 60 columns with first column is the header.
Here is my matlab code, but it is not really working.
filename = complex_data.txt';
n_line = 24; % define line to read
fid = fopen(filename); % open file
result = textscan(fid, '%s',1,'Headerlines', n_line-1, 'Delimiter' ,''); % read line
result2 = result{1}; % unbox from cell
It gives the following, but in 1x1 cell array. I cannot seperate each column value.
Any good solutions?
Thank you!
>> result2{1,1}
ans =
'dN [P] 0.000000 0.000000 188.099869 1400.467163 3013.950684 4364.177246 4175.059570 3351.919678 2300.576904 1153.224731 522.787903 247.329086 141.390442 84.811569 42.784401 26.608347 32.193478 9.810030 2.089025 1.043882 3.096093 0.032933 0.499443 1.582599 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.030052 0.000000 0.000000 0.000000 0.000000 1.021430 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 '

Accepted Answer

Voss
Voss on 12 Dec 2023
Edited: Voss on 12 Dec 2023
Here's one way:
filename = 'complex_data.txt';
L = readlines(filename);
% n_line = 24; % define line to read
str = 'dN [P]';
n_line = find(startsWith(L,str),1);
result = sscanf(extractAfter(L(n_line),str),'%f',[1 Inf]);
format long g
disp(result);
Columns 1 through 7 0 0 188.099869 1400.467163 3013.950684 4364.177246 4175.05957 Columns 8 through 14 3351.919678 2300.576904 1153.224731 522.787903 247.329086 141.390442 84.811569 Columns 15 through 21 42.784401 26.608347 32.193478 9.81003 2.089025 1.043882 3.096093 Columns 22 through 28 0.032933 0.499443 1.582599 0 0 0 0 Columns 29 through 35 0 0 0 0 1.030052 0 0 Columns 36 through 42 0 0 1.02143 0 0 0 0 Columns 43 through 49 0 0 0 0 0 0 0 Columns 50 through 56 0 0 0 0 0 0 0 Columns 57 through 59 0 0 0

More Answers (1)

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 12 Dec 2023
Edited: Sulaymon Eshkabilov on 12 Dec 2023
Here is how it can be attained:
filename = 'complex_data.txt';
% Set up the Import Options and import the data:
opts = delimitedTextImportOptions("NumVariables", 61);
% Specify range and delimiter:
opts.DataLines = [20, Inf];
opts.Delimiter = "\t";
% Specify column names and types:
opts.VariableNames = ["ParticleDistribution60sauto", "VarName2", "VarName3", "VarName4", "VarName5", "VarName6", "VarName7", "VarName8", "VarName9", "VarName10", "VarName11", "VarName12", "VarName13", "VarName14", "VarName15", "VarName16", "VarName17", "VarName18", "VarName19", "VarName20", "VarName21", "VarName22", "VarName23", "VarName24", "VarName25", "VarName26", "VarName27", "VarName28", "VarName29", "VarName30", "VarName31", "VarName32", "VarName33", "VarName34", "VarName35", "VarName36", "VarName37", "VarName38", "VarName39", "VarName40", "VarName41", "VarName42", "VarName43", "VarName44", "VarName45", "VarName46", "VarName47", "VarName48", "VarName49", "VarName50", "VarName51", "VarName52", "VarName53", "VarName54", "VarName55", "VarName56", "VarName57", "VarName58", "VarName59", "VarName60", "VarName61"];
opts.VariableTypes = ["string", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "double", "string"];
% Specify file level properties:
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Specify variable properties:
opts = setvaropts(opts, ["ParticleDistribution60sauto", "VarName61"], "WhitespaceRule", "preserve");
opts = setvaropts(opts, ["ParticleDistribution60sauto", "VarName61"], "EmptyFieldRule", "auto");
% Import the data:
MY_DATA = readtable(filename, opts);
% DATA extraction:
WHAT_I_WANT = MY_DATA{5,2:60}
WHAT_I_WANT = 1×59
1.0e+03 * 0 0 0.1881 1.4005 3.0140 4.3642 4.1751 3.3519 2.3006 1.1532 0.5228 0.2473 0.1414 0.0848 0.0428 0.0266 0.0322 0.0098 0.0021 0.0010 0.0031 0.0000 0.0005 0.0016 0 0 0 0 0 0

Products


Release

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!