Importing text file and reading certain values with key terms

Hello, I am trying to import this text file into matlab but only reading certain values. Ignoring the uncollided data, I want to be able to retrieve the location of each detector (x,y and z) , (z = 0 for all detectors). Also, I want to be able to retrieve the "total" value which can be found at the end of each collided data. I know this data that is being imported is very hard to convert to the values I need but I would appreciate any help. Thank you in advance.

8 件のコメント

Paolo
Paolo 2018 年 9 月 18 日
編集済み: Paolo 2018 年 9 月 18 日
Could you show the desired output?
John Vargas
John Vargas 2018 年 9 月 18 日
Yes, I am sorry, the blocks alternate from collided and uncollided, if you keep scrolling past the 2nd block ( the uncollided one ), the 3rd one should have no label, meaning it is a collided block.
John Vargas
John Vargas 2018 年 9 月 18 日
if getting the coordinates is too much, just retrieving the "total" values from the collided data is enough to get started. Again, thank you.
Paolo
Paolo 2018 年 9 月 18 日
編集済み: Paolo 2018 年 9 月 18 日
Do you want the coordinates x,y,z in three matrices? Easy for total, maybe not very pretty:
raw = fileread('D1output1.txt');
[~,tok] = regexp(raw,'detector[^\n]*\n\s(?!\buncollided\b)[\s\S]*?total\s+(\d+\.\d+E[-+]\d+)','match','tokens');
data=str2double([tok{:}])
or easier:
raw = fileread('D1output1.txt');
[~,tok] = regexp(raw,'total\s+(\d+\.\d+E[-+]\d+)','match','tokens');
data=str2double([tok{:}]);
as, from looking at the text file, there is no "total" section for uncollided data.
John Vargas
John Vargas 2018 年 9 月 18 日
Thank you! And yes, 3 matrices would be fine for the coordinates ( Only for the collided data again please.
Paolo
Paolo 2018 年 9 月 18 日
The coordinates being for example
x,y,z = 3.97500E+03 3.97500E+03-9.95000E+01
right?
Paolo
Paolo 2018 年 9 月 18 日
If that is the case, try:
raw = fileread('D1output1.txt');
[~,tok] = regexp(raw,'x,y,z = (\d+\.\d+E\+\d+) (\d+\.\d+E\+\d+)(-\d+\.\d+E\+\d+)\s*\n\s(?!uncollided)','match','tokens');
data=[tok{:}];
x=str2double(data(1:3:end));
y=str2double(data(2:3:end));
z=str2double(data(3:3:end));
John Vargas
John Vargas 2018 年 9 月 21 日
Sorry for the late reply, but when I tried running this code, I get the coordinates for each x and y as a matrix of 1x80 but there should be a total of 100 collided points, thus getting a matrix of 1x100. Do you know why this is the case?

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

回答 (0 件)

カテゴリ

タグ

質問済み:

2018 年 9 月 18 日

コメント済み:

2018 年 9 月 21 日

Community Treasure Hunt

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

Start Hunting!

Translated by