# Extracting numerical results from a text file at different positions

1 Ansicht (letzte 30 Tage)
GS76 am 10 Mär. 2019
Kommentiert: GS76 am 11 Mär. 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 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
darova am 10 Mär. 2019

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

GT am 11 Mär. 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:)
% 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 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
GS76 am 11 Mär. 2019
Thank you GT!
This worked out excellently.
I will continue learning and practising "regexp". Thank you for all your help and tips.

Melden Sie sich an, um zu kommentieren.

### Weitere Antworten (1)

GT am 10 Mär. 2019
There is probably an easier way to do this... but this should help. (I am using R2018b).
% 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 KommentareKeine anzeigenKeine ausblenden
GT am 10 Mär. 2019
You can always convert the last column into doubles...
result.Var2 = str2double(result.Var2);
GS76 am 11 Mär. 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.

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Get Started with MATLAB finden Sie in Help Center und File Exchange

R2018b

### Community Treasure Hunt

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

Start Hunting!

Translated by