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 Comments

Could you show the desired output?
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.
if getting the coordinates is too much, just retrieving the "total" values from the collided data is enough to get started. Again, thank you.
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.
Thank you! And yes, 3 matrices would be fine for the coordinates ( Only for the collided data again please.
The coordinates being for example
x,y,z = 3.97500E+03 3.97500E+03-9.95000E+01
right?
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));
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?

Sign in to comment.

Answers (0)

Asked:

on 18 Sep 2018

Commented:

on 21 Sep 2018

Community Treasure Hunt

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

Start Hunting!