How to extract numeric data between string lines?
3 ビュー (過去 30 日間)
古いコメントを表示
Hi MATLAB Community
I'm trying to solve this problem, which for sure is not new, but I haven't been able to find a proper solution.
I have a file with several headlines, and then a lot of information in the following way:
Binning n: 1, "De19 ", Event #: 150, Primary(s) weight 1.0000E+00
Number of hit cells: 0
Binning n: 1, "De19 ", Event #: 151, Primary(s) weight 1.0000E+00
Number of hit cells: 1
1 7.185244612628594E-05
Binning n: 1, "De19 ", Event #: 152, Primary(s) weight 1.0000E+00
Number of hit cells: 0
Binning n: 1, "De19 ", Event #: 153, Primary(s) weight 1.0000E+00
Number of hit cells: 0
As shown, sometimes after the "Number of hit cells" line, there are numbers. I would like to extract them in a matrix or array. Is there a way to do this?
I attached an example file, that usually contains a lot more of data, that I erased for weight questions.
Thank you very much in advance
0 件のコメント
採用された回答
Stephen23
2021 年 1 月 27 日
編集済み: Stephen23
2021 年 1 月 27 日
str = fileread('02-2021-Clearance-Box005_fort72.txt');
rgx = '(?<=Number of hit cells:\s+\d+\s+)(\d+[^\n]*)';
tmp = regexp(str,rgx,'match')
vec = cellfun(@(s)sscanf(s,'%f',[1,Inf]),tmp,'uni',0) % convert to numeric
mat = vertcat(vec{:}) % optional merge into one numeric matrix
4 件のコメント
Stephen23
2021 年 1 月 27 日
編集済み: Stephen23
2021 年 1 月 27 日
If there are always exactly two numbers on each of those lines, then this is probably more efficient:
str = fileread('02-2021-Clearance-Box005_fort72.txt');
rgx = '(?<=Number of hit cells:\s+\d+\s+)(\d+[^\n]*)'; % unchanged
tmp = regexp(str,rgx,'match'); % unchanged
mat = sscanf(sprintf(' %s',tmp{:}),'%f',[2,Inf]).'
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Data Type Conversion についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!