Extracting numerical results from a text file at different positions

1 回表示 (過去 30 日間)
GS76
GS76 2019 年 3 月 10 日
コメント済み: GS76 2019 年 3 月 11 日
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":
First Heading
H0.PNG
Second Heading
H2.PNG
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.

採用された回答

GT
GT 2019 年 3 月 11 日
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 件のコメント
GS76
GS76 2019 年 3 月 11 日
Thank you GT!
This worked out excellently.
I will continue learning and practising "regexp". Thank you for all your help and tips.

サインインしてコメントする。

その他の回答 (1 件)

GT
GT 2019 年 3 月 10 日
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 件のコメント
GT
GT 2019 年 3 月 10 日
You can always convert the last column into doubles...
result.Var2 = str2double(result.Var2);
GS76
GS76 2019 年 3 月 11 日
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:
Error.PNG
Could you assist me to correct this small problem in the code.
Thank you again for your assistance.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGet Started with MATLAB についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by