# Extracting numerical results from a text file at different positions

3 visualizzazioni (ultimi 30 giorni)
GS76 il 10 Mar 2019
Commentato: GS76 il 11 Mar 2019
I have a number of output files to process, written out from Finite Element Analysis software, from which I need to extract data.
I need to extract data under 2 different "headings" from each of the files. However, each of the files has these headings at different rows. I have attached a "zipped" file with 2 files indicating this problem.
The following screenshots show the "headings" highlighted and the numerical data to be extracted, shown inside a "box":
I have tried a number of options in Matlab, but I am overwhelmed as I am new to Matlab and programming.
Any assistance and guidance, would be much appreciated.
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
darova il 10 Mar 2019

Accedi per commentare.

### Risposta accettata

GT il 11 Mar 2019
good catch, my bad:) it was late at night. This should work. In either case if you are learning MATLAB, regexp are very powerful. They exist in many languages, it is worth understanding them:)
a = fileread('0295_PhD_AB~Analysis 1.txt');
% find ( H A R M O N I C = \d )
[b,c] = regexp(a,'( H A R M O N I C = \d )','tokens');
result = table();
% find the 2nd and the 6th number in the table
for i = 1:length(c)
aux = (a(c(i)+586:c(i)+700));
d = regexp(aux,'([0-9.E-+]*)','tokens');
result = [result;table(repmat(b{i},2,1),[d{2};d{6}])];
end
result.Var2 = str2double(result.Var2);
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
GS76 il 11 Mar 2019
Thank you GT!
This worked out excellently.
I will continue learning and practising "regexp". Thank you for all your help and tips.

Accedi per commentare.

### Più risposte (1)

GT il 10 Mar 2019
There is probably an easier way to do this... but this should help. (I am using R2018b).
a = fileread('0295_PhD_AB~Analysis 1.txt');
% find ( H A R M O N I C = \d )
[b,c] = regexp(a,'( H A R M O N I C = \d )','tokens');
result = table();
% find
for i = 1:length(c)
aux = (a(c(i)+586:c(i)+700));
d = regexp(aux,'([0-9.E-]*)','tokens');
result = [result;table(repmat(b{i},2,1),[d{2};d{7}])];
end
result
##### 2 CommentiMostra NessunoNascondi Nessuno
GT il 10 Mar 2019
You can always convert the last column into doubles...
result.Var2 = str2double(result.Var2);
GS76 il 11 Mar 2019
Hi GT,
Thank you very much for this help. This is exactly what I was hoping to achieve.
However, I found the following error whereby the code is extracting the last value from the second column and not the first, when extracting for "HARMONIC = 2". Please see the attached screenshot:
Could you assist me to correct this small problem in the code.
Thank you again for your assistance.

Accedi per commentare.

### Categorie

Scopri di più su Get Started with MATLAB in Help Center e File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!

Translated by