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?
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.
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.
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?

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

태그

질문:

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